Reactjs React本机导航器组件将被redux状态污染

Reactjs React本机导航器组件将被redux状态污染,reactjs,react-native,redux,Reactjs,React Native,Redux,我正在为react原生项目使用react redux。 React Native Navigator将旧组件保留在堆栈中,但只是为了在屏幕上隐藏组件。 同时,如果当前场景使用相同的state.propName,则隐藏的场景也将更改。 当navigator.pop()切换到旧场景时,UI正在更改 比如说,, 我有两个场景和以及redux状态。posts存储posts数据列表 在中,state.posts存储所有类型的帖子(包括图像帖子) 在中,state.posts仅存储图像帖子 当我将navig

我正在为react原生项目使用react redux。 React Native Navigator将旧组件保留在堆栈中,但只是为了在屏幕上隐藏组件。 同时,如果当前场景使用相同的state.propName,则隐藏的场景也将更改。 当navigator.pop()切换到旧场景时,UI正在更改

比如说,, 我有两个场景
以及redux
状态。posts
存储posts数据列表

中,state.posts存储所有类型的帖子(包括图像帖子)

中,state.posts仅存储图像帖子

当我将navigator.push()从
推到
时,我将通过操作/reducer获取新的帖子列表并保存到state.posts

然后我做了
navigator.pop()
回到原来的
,state.posts现在只有图像posts,因为它被覆盖了

我对react router/redux router做了一些跟踪,似乎它们没有这样的问题,因为在web中,组件将在路由之间卸载/重新装载

一种可能的解决方案是在推送到新场景时保存原始组件状态。返回时,使用组件状态中的数据,而不是使用react redux中的道具。 但解决方案将增加很多复杂性,因为目前的数据并非来自单一真相

另一种可能的解决方案是将state.propName与所有路由隔离开来。但我认为现在这不是一个好主意

任何曾经遇到过这样问题的人,请与我分享你的经验。
谢谢。

我最后转而使用堆栈来存储导航更改之间的状态。 由于我使用redux操作来控制导航器(即,推到路线或从路线弹出),所以使用reducer-enhancer来实现这一点很简单

机制很像,但我写了一个更简单的

const ActionTypes={
推送路线:“推送路线”,
POP_路线:“POP_路线”
};
导出默认函数navAwarable(减速器){
var stateStack=[];
返回(状态、操作)=>{
if(action.type==推送路径){
stateStack.push(状态);
返回减速器(状态、动作);
}else if(action.type==弹出路径){
让origState=stateStack.pop();
返回减速器(初始状态,动作);
}否则{
返回减速器(状态、动作);
}
};
};
用法

导出默认组合减速机({
路线,,
职位:可导航(职位)
});