ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

子组件dispatch导致其他页面刷新问题解决

2021-08-25 19:03:14  阅读:141  来源: 互联网

标签:models dispatch state 组件 loadingEffect 页面


问题:

   现在有一个页面,包含"项目基本要素"和"供应链管控要素"多个组件,其中一个组件有表单级联,通过产品类型的不同选取去调接口获得产品名称的下拉

   调接口是通过dispatch实现的.

理想状态:当我调用这个接口时只改变另一个相关下拉框的数据,其他的以及其他同级组件的值不变.

实际结果:当我调用后,""供应链管控要素""组件的状态变成了默认?!!

操作前:

 

操作后:

 

原因:

  dva的机制. 1.dispatch会更新loadingEffect的状态

                    2.页面使用了<Spin>加载中组件,并通过loadingEffect来控制

 <Spin spinning={loadingEffect.models['basicManage']}>
<组件1 > //有dispatch操作
<组件2>
</Spin>

  因为组件1的dispatch导致loadingEffect状态改变,所以整个页面都重新走了一遍,其他组件的状态也被重置了.

 

注意:1.实际上,就算我dispatch的不是models.basicManage,而是其他的models,也会判定为loadingEffect发生了变化.

        2.就算我没使用loadingEffect,而是只是引入也会导致页面的状态变化.并不是loadingEffect的特点,而是useSelector的,它监听了models里面的值,当其发生变化,则自动重新引入

const loadingEffect = useSelector((state) => state.loading);

 

 

解决方案:

  只引入loading中需要用的models,然后把组件1里的dispatch的store写在另一个models里

  const loadingEffect = useSelector(
    (state) => state.loading.models['basicManage'],
  );

 <Spin spinning={loadingEffect}>
<组件1>
<组件2>
</Spin>

 

标签:models,dispatch,state,组件,loadingEffect,页面
来源: https://www.cnblogs.com/Shyno/p/15186520.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有