Per quanto ne so, devo scrivere la richiesta in action create. Come utilizzare una promessa in atto per l'invio di una richiesta? Sto ottenendo dati in azione. Quindi il nuovo stato viene creato nel riduttore. Collega azione e riduttore. Ma non so come usare la promessa per la richiesta.Come fare una richiesta AJAX in redux
azione
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;
})
};
}
Reducer
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;
Container Come visualizzare i dati in un contenitore?
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;
grazie, ma ora ricevo Avviso: Impossibile propType: obbligatorio 'libri' non è stato specificato in' booksPage'. Controllare il metodo di rendering di 'Connect (booksPage)' .warning @ (programma): 45 (programma): 45 Avviso: getDefaultProps viene utilizzato solo nelle classiche definizioni React.createClass. Utilizzare invece una proprietà statica denominata 'defaultProps'. –
Hai ridotto 'action.data' in stato? –
Object.assign ({}, stato, { libri: action.data.books, autori: action.data.authors }); –