Je convertis mon projet de flux en redux.Envoi d'une action depuis un appel asynchrone en Redux
Le composant racine avant est très simple Redux:
import React from "react";
import ReactDOM from "react-dom";
import { Provider } from 'react-redux'
import AppReducer from './AppReducer'
import { createStore } from 'redux'
const store = createStore(AppReducer)
ReactDOM.render(
<Provider store={store}>
//rest of application goes here
</Provider>,
app);
En utilisant mapToProps, mapToDispatch Je peux faire face à un comportement au niveau de compoment très bien.
Maintenant, je viens à réponses du serveur, soit des appels asynchrones.
Dans mon implémentation flux J'ai un fichier un appel « Serveur » J'ai mon appel AJAX et une promesse est retourné qui appelle ensuite AppDispatcher.dispatch:
function handleResponse(endpoint) {
return function (err, res) {
if (res && res.ok) {
receiveData(endpoint, res);
}
};
}
function receiveData(endpoint, responseData) {
AppDispatcher.dispatch(
{
type: ActionTypes.SERVER_RESPONSE,
endpoint: endpoint,
state: "ReponseIsOK",
payload: responseData.body
}
);
dispatch(endpoint, "CommunicationState.RESPONSE_OK", responseData.body);
}
Comment dois-je convertir en redux?
Je dois obtenir en quelque sorte au répartiteur, et j'espérais quelque chose comme ça fonctionnerait:
function receiveData(endpoint, responseData) {
let store = Provider.getStore();
store.dispatch(
{
type: ActionTypes.SERVER_RESPONSE,
endpoint: endpoint,
state: "ReponseIsOK",
payload: responseData.body
}
);
}
J'ai essayé provider.store, provider.context.store et ils semblent aussi Ne pas travailler.
J'ai vraiment juste besoin d'accéder au magasin pour pouvoir déclencher des événements, mais je ne sais pas comment y accéder.
mais comment puis-je accéder au magasin de Redux? –
avec 'getState()' donc si "foo" est la propriété sur le magasin auquel vous voulez accéder, ce serait 'var foo = getState(). Foo' – melmquist
@OliverWatkins Si vous demandez" comment "Thunk obtient l'accès au magasin, je crois qu'il est donné quand vous le passez en middleware à 'createStore()'.Voir la [section d'installation dans les docs pour savoir comment faire] (https://github.com/gaearon/redux-thunk#installation) – melmquist