在useEffect中从Redux Store设置本地state及状态副本是否合理?
问题1:保留从Redux Store复制而来的本地状态是否合理?
- 你的场景下完全合理,不属于冗余的可信数据源:你本地存的是用户未提交的临时修改值,Redux Store存的是全局统一的基准值,二者分工完全不同。如果不存本地状态,用户每改一个字符你都要dispatch action改Store,不仅没必要,还会触发所有依赖这个Store字段的组件重渲染,性能反而差。
- 只有当你不需要在本地做临时修改、所有变更都直接同步到Store的场景下,本地状态才是多余的,直接用
useSelector返回的值即可。
问题2:在useEffect中调用setState是否合理?
- 你的思路没问题,但写法有两个可以优化的点:
- 你贴的代码里
useEffect的语法是错的,少了回调函数包裹逻辑 - 依赖项只写了
key,如果后续key不变但Store里的myVar更新了,本地状态不会同步,建议补全依赖
- 你贴的代码里
- 修正后的写法参考:
const myStoreObj = useSelector(state=>state.Store); const key = myStoreObj?.key; // 也可以直接在useState里给初始值,少一次重渲染 const [myVar, setMyVar] = useState(myStoreObj?.myVar ?? ''); useEffect(() => { if(key){ setMyVar(myStoreObj.myVar); } }, [key, myStoreObj?.myVar]); // 补全依赖,避免更新遗漏
- 如果你的场景只需要在Store初始化完成后同步一次初始值,后续Store的
myVar变更不需要同步到本地,那你原来的依赖只写key也没问题,只要把语法修正即可。
内容的提问来源于stack exchange,提问作者Huzan Toorkey
相关产品推荐
相关产品推荐

