Comment accéder à l'état dans le réducteur Redux?

J'ai un réducteur, et pour calculer le nouvel état, j'ai besoin de données de l'action et aussi des données d'une partie de l'état non gérée par ce réducteur. Plus précisément, dans le réducteur que je vais montrer ci-dessous, j'ai besoin d'accéder au champ accountDetails.stateOfResidenceId .

InitialState.js:

 export default { accountDetails: { stateOfResidenceId: '', accountType: '', accountNumber: '', product: '' }, forms: { blueprints: [ ] } }; 

FormsReducer.js:

 import * as types from '../constants/actionTypes'; import objectAssign from 'object-assign'; import initialState from './initialState'; import formsHelper from '../utils/FormsHelper'; export default function formsReducer(state = initialState.forms, action) { switch (action.type) { case types.UPDATE_PRODUCT: { //I NEED accountDetails.stateOfResidenceId HERE console.log(state); const formBlueprints = formsHelper.getFormsByProductId(action.product.id); return objectAssign({}, state, {blueprints: formBlueprints}); } default: return state; } } 

Index.js (réducteur de racine):

 import { combineReducers } from 'redux'; import accountDetails from './accountDetailsReducer'; import forms from './formsReducer'; const rootReducer = combineReducers({ accountDetails, forms }); export default rootReducer; 

Comment puis-je accéder à ce champ?

Je voudrais utiliser thunk pour cela, voici un exemple:

 export function updateProduct(product) { return (dispatch, getState) => { const { accountDetails } = getState(); dispatch({ type: UPDATE_PRODUCT, stateOfResidenceId: accountDetails.stateOfResidenceId, product, }); }; } 

Fondamentalement, vous obtenez toutes les données dont vous avez besoin sur l'action, vous pouvez envoyer ces données à votre réducteur.

Bonne chance!

Vos options sont soit d'écrire plus de logique en plus de l'utilisation de combineReducers , ou d'inclure plus de données dans l'action. La FAQ de Redux couvre ce sujet: http://redux.js.org/docs/faq/Reducers.html#reducers-share-state .

En outre, je travaille actuellement sur un nouvel ensemble de pages sur les documents Redux sur le thème «Structuration des réducteurs», que vous pourriez trouver utile. Les pages WIP actuelles se trouvent à https://github.com/markerikson/redux/blob/structure-reducers-page/docs/recipes/StructureReducers.md .

Je suggère que vous le passez dans le créateur d'action. Donc, quelque part, vous aurez un créateur d'action qui fait quelque chose comme ceci:

 updateProduct(arg1, arg2, stateOfResidenceId) { return { type: UPDATE_PRODUCT, stateOfResidenceId } } 

À l'endroit où vous déclenchez l'action, supposons que vous utilisez la réaction, vous pouvez utiliser

 function mapStateToProps(state, ownProps) { return { stateOfResidenceId: state.accountdetails.stateOfResidenceId } } 

Et connectez-vous à votre composant réactif à l'aide de la connexion reac-redux.

 connect(mapStateToProps)(YourReactComponent); 

Maintenant, dans votre composant de réaction où vous déclenchez la mise à jour de l'action, vous devriez avoir le statut d'état comme un atout, et vous pouvez le transmettre à votre créateur d'action.

Cela semble compliqué, mais cela concerne vraiment la séparation des préoccupations.

Lors de l'envoi d'une action, vous pouvez passer un paramètre. Dans ce cas, vous pouvez passer accountDetails.stateOfResidenceId à l'action, puis la transmettre au réducteur en tant que charge utile.