美文网首页
为什么要使用useSelector和useDispatch

为什么要使用useSelector和useDispatch

作者: 闹个笑话自己笑 | 来源:发表于2019-12-09 16:45 被阅读0次

    在项目中,以前用的dva来管理数据流,其中使用的是dva中connect来连接组件与model,

    /**
     *  spareRepertory: 命名空间的名字,项目中唯一
     *  loading:监听effects的方法
     */ 
    export default connect(({ spareRepertory, loading }: any) => ({
      // spareRepertory的所有值,有一个值改变都会导致组件重新渲染
      spareRepertory,
      // 获取effects中某个方法的执行状态(开始执行为true,结束执行变为false)
      lisLoading: loading.effects["spareRepertory/queryRepertoryList"]
    }))(List)
    

    自从dva有了bate版本后,同事重构部分项目时,直接将connect删掉,使用useDispatch与useSelector,然后此时又不能直接监听dva的model文件中effects的方法,导致函数组件中不能直接使用loading,必须手动控制loading的状态。

    /** 使用useDispatch获取dispatch,可以调用model的方法 */
      const dispatch = useDispatch();
      /** 使用useSelector获取项目中所有model的命名空间,并取某一个命名空间里的某一个值 */
      const filterList = useSelector<any, SpareRepertory.filterValue>(
        ({ spareRepertory }) => spareRepertory.filterParam
      );
      /** 在model中手动控制loading状态,比如请求接口造成的等待 */
      const loading = useSelector<any, boolean>(({ spareRepertory }) => spareRepertory.loading);
    

    在不考虑性能的前提下,这样不是增加了代码吗?毕竟需要我们自己控制loading的状态,用connect时可直接需要获取loading,这个loading在effects开始执行时变为true,方法执行完变为false。所以,我们为什么要使用useSelector和useDispatch呢?或者说,在哪些场景下使用useSelector和useDispatch更好呢?

    。。。。。。未完待续(因为我自己都还二懂二懂的😴)

    各位大佬,碰巧你会的话,我们可以交流交流啊~~😝

    相关文章

      网友评论

          本文标题:为什么要使用useSelector和useDispatch

          本文链接:https://www.haomeiwen.com/subject/ewfigctx.html