Vous avez besoin de mettre en œuvre un moyen de namespacing le cas. Ce peut être aussi élémentaire que le passage d'une clé pour différencier les composants et les réducteurs.
Vous pouvez utiliser l' ownProps
votre mapStateToProps
de la fonction de guide de la cartographie d'un espace de noms
const mapStateToProps = (state, ownProps) {
let myState = state[ownProps.namespace]
return {
myState.value
}
}
La même méthode peut être utilisée pour transmettre un espace de noms à l' mapDispatchToProps
const mapDispatchToProps = (dispatch, ownProps) {
return {
myAction: (myParam) => dispatch(myAction(ownProps.namespace, myParam))
}
}
N'oubliez pas d'utiliser l'espace de noms dans le type d'action afin de les réducteurs de ne pas marcher sur les orteils
const myAction => (namespace, myParam) {
return { type: `${namespace}/${MY_TYPE_CONSTANT}`, myParam }
}
Et assurez-vous que le réducteur est préfixée trop
const myReducer = (namespace) => (state = initialState, action) => {
switch(action.type) {
case `${namespace}/${MY_TYPE_CONSTANT}`:
return { ...state, action.myParam }
default:
return state
{
}
Maintenant, ajoutez les 2 espaces de réducteurs lors de la combinaison de réducteurs
combineReducers({
myInstance1 : myReducer('myInstance1')
myInstance2 : myReducer('myInstance2')
}
Enfin passer de l'espace de noms pour chaque instance
render() {
return (
<div>
<MyComponent namespace='myInstance1' />
<MyComponent namespace='myInstance2' />
</div>
)
}
Avertissement: je suis le principal contributeur à la suite de la bibliothèque.
redux-sous-espace peut fournir un plus avancées namespacing mise en œuvre sans avoir à ré-écrire de cette façon pour chaque composant que vous souhaitez avoir plusieurs instances.
La création de la réducteurs est similaire à ci-dessus
const reducer = combineReducers({
myInstance1: namespaced('myInstance1')(myReducer)
myInstance2: namespaced('myInstance2')(myReducer)
})
Ensuite, SubspaceProvider
peut être utilisé pour changer l'état de chaque composant
render() {
return (
<div>
<SubspaceProvider mapState={state => state.myInstance1} namespace='myInstance1'>
<MyComponent />
</SubspaceProvider>
<SubspaceProvider mapState={state => state.myInstance2} namespace='myInstance2'>
<MyComponent />
</SubspaceProvider>
</div>
)
}
Assurez-vous de changer d' mapStateToProps
fonction donc, commencer la traversée de la sous-arborescence mappé dans le fournisseur
const mapStateToProps = (state) {
return {
state.value
}
}
Il y a aussi un Ordre Supérieur Composant si vous préférez afin de réduire la nidification.