我有一个复杂的 React 组件
FileEditor
,它使用 Redux Toolkit 进行内部状态管理。
这个
FileEditor
组件由主 React App
(不使用 Redux)以这种简单的方式使用:
FileEditor
加载并显示文件数据FileEditor
的文件。我注意到,当我执行这一系列操作时:(1)打开工作区->(2)打开文件->(3)关闭工作区->(4)打开工作区->(5)打开另一个文件,状态
FileEditor
似乎一直坚持行动 (2)。
我本以为当组件卸载时,redux 存储就会消失,并且没有状态持久性。
我通过向我的
FileEditor
组件添加clear() 操作解决了这个问题
useEffect(() => {
return () => {
console.debug(`Unmouting and clearing state`);
dispatch(actions.clear());
};
}, []);
我的问题是:
<AppNoRedux><ComponentWithRedux/></AppNoRedux>
不推荐吗?<AppNoRedux><ComponentWithRedux key="1"/><ComponentWithRedux key="2"/></AppNoRedux>
会导致状态干扰问题吗?感谢您的宝贵时间!
将 Redux 逻辑移至专用 App 组件:
创建一个新的组件(App)来包装您现有的App逻辑并使用Redux Toolkit来管理状态。 将 FileEditor 组件移至启用 Redux 的 App 组件内。 这集中了状态管理并防止混合问题。 考虑多个 FileEditor 实例的共享存储:
如果您计划拥有多个 FileEditor 实例,请探索以下选项: Redux Persist:该库允许您跨会话持久保存状态,但需要仔细配置以避免冲突。 Redux Thunk 或 Saga 中间件:使用它们来管理 FileEditor 组件内的异步数据获取和状态更新,而无需依赖为每个实例创建不必要的存储。 通过遵循这些建议,您可以实现更清晰、更可预测且可扩展的应用程序结构,用于管理 React 应用程序中的状态。