Wie man eine AJAX-Anfrage in redux macht
Ich weiß, ich muss schreiben, Aufforderung in Aktion zu erstellen. Wie Sie ein Versprechen in Aktion für die Einreichung einer Anfrage? Ich bin immer Daten in Aktion. Dann wird der neue Staat geschaffen, in reducer. Binden action und reducer in Verbindung. Aber ich weiß nicht, wie zu verwenden Versprechen für die Anfrage.
Aktion
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
Wie die Anzeige von Daten in container?
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;
InformationsquelleAutor der Frage Disa Skolzin | 2015-11-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Sie bereits redux, die Sie anwenden können
redux-thunk
middleware, die Ihnen erlaubt zu definieren, asynchrone Aktionen.Installation & Verwendung: Redux-thunk
InformationsquelleAutor der Antwort JensDebergh
Sollten Sie die Verwendung von Asynchronen Aktionen beschrieben, die in Redux-Dokumentation
Hier ein Beispiel reducer für async-action.
und dann schaffen Sie die Asynchrone Aktion.
Mehrere Hinweise:
InformationsquelleAutor der Antwort Kiddo
Sollten Sie in der Lage sein zu verwenden
dispatch
innerhalb der callback (wenn Sie übergeben es als argument):Dann, pass
dispatch
zu der Aktion:Nun, sollten Sie haben Zugriff auf die
action.data
Eigenschaft in der reducer:InformationsquelleAutor der Antwort Davin Tryon
Möchten Sie vielleicht separate Bedenken, zu halten Aktion Machern von "pure".
Lösung; einige schreiben middleware. Nehmen Sie dies zum Beispiel (superagent).
Stellen alles in ein Modul.
Nun, Sie könnten ein action-Schöpfer namens 'auth':
Die Eigenschaft "agent" wird aufgegriffen, indem die middleware sendet die konstruierte Anfrage über das Netzwerk, dann löst das ankommende Ergebnis zu deinem Shop.
Ihre reducer all diese Griffe, nach dem definieren der Haken:
Nun Spritzen Sie alles in Ihrer view-Logik. Ich bin mit reagieren als ein Beispiel.
All dies bedeutet, dass Sie bereits eine pipeline mit webpack -, rollup-oder etwas, transpile von es2015 und reagieren, vanilla js.
InformationsquelleAutor der Antwort Thomas E