私が知っている限り、私はaction createでリクエストを書く必要があります。要求を提出するための約束をどのように使用するのですか?私は実際にデータを取得しています。その後、減速機に新しい状態が作成されます。接続時にアクションとレデューサーをバインドします。しかし、私は要求のために約束を使う方法を知らない。AJAXリクエストを還元する方法
アクション
import $ from 'jquery';
export const GET_BOOK = 'GET_BOOK';
export default function getBook() {
return {
type: GET_BOOK,
data: $.ajax({
method: "GET",
url: "/api/data",
dataType: "json"
}).success(function(data){
return data;
})
};
}
リデューサー
import {GET_BOOK} from '../actions/books';
const booksReducer = (state = initialState, action) => {
switch (action.type) {
case GET_BOOK:
return state;
default:
return state;
}
};
export default booksReducer;
コンテナ どのように表示データコンテナ内の?
import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux';
import getBook from '../actions/books';
import Radium from 'radium';
import {Link} from 'react-router';
function mapStateToProps(state) {
return {
books: state.data.books,
};
}
function mapDispatchToProps(dispatch) {
return {
getBooks:() => dispatch(getBook()),
};
}
@Radium
@connect(mapStateToProps, mapDispatchToProps)
class booksPage extends Component {
static propTypes = {
getBooks: PropTypes.func.isRequired,
books: PropTypes.array.isRequired,
};
render() {
const {books} = this.props;
return (
<div>
<Link to={`/authors`}><MUIButton style="flat">All Authors</MUIButton></Link>
<ul>
{books.map((book, index) =>
<li key={index}>
<Link to={`/book/${book.name}`}><MUIButton style="flat"><div class="mui--text-black mui--text-display4">
"{book.name}"</div></MUIButton></Link>
<Link to={`/author/${book.author}`}><MUIButton style="flat"><div class="mui--text-black mui--text-display4">
{book.author}</div></MUIButton></Link>
</li>
)}
</ul>
</div>
);
}
}
export default booksPage;
ありがとうございますが、警告が表示されます:propTypeに失敗しました:必要なprop 'books'が' booksPage'に指定されていません。 (プログラム):(プログラム):45警告:getDefaultPropsは、従来のReact.createClass定義でのみ使用されています。代わりに 'defaultProps'という静的プロパティを使用してください。 –
'action.data'を状態に減らしましたか? –
Object.assign({}、状態、{ 書籍:action.data.books、 著者:action.data.authors }); –