zoukankan      html  css  js  c++  java
  • dva在hook里effect异步获取数据不同步问题

    标题

    使用connect

    在使用ant design 的tree组件的时候,使用class组件的时候异步树请求是没问题的(原因为...),可是改为hook的时候发现发送的model里的state并不能实时同步,搜索发现,dva里effect提供了一个返回promise的机制

      // model.js
      
      const Model = {
      	  nameSpace: 'treeNodes'
      	  state: [],
      	  ...
      	  effects: {
            *getNode({ payload }, { call, put }) {
              // 发起的异步请求,请求在services层
              const response = yield call(getRuleNode, payload);
              yield put({
                type: 'getRuleNodes',
                payload: response,
              });
              if (response) {
              // 这里会返回一个promise
                return response.value
              }
            },
          },
       }
       
     	// app.js
     
          setTimeout(() => {
            var promise1 = props.getChildNode(treeNode.props.dataRef.key)
            promise1.then(res => {
              treeNode.props.dataRef.children = res
            })
            resolve();
          }, 300)
      
    

    如此使用后发现数据可以获取到但是由于页面不会触发更新所以,并没有出现在界面上。对state再次复制触发更新即可。

    	  const [tree, setTree] = useState([...props.treNodes])
          setTimeout(() => {
            var value = props.getChildNode(treeNode.props.dataRef.key)
            value.then(res => {
              treeNode.props.dataRef.children = res
              setTree([...res])
            })
            resolve();
          }, 300)
    

    正常显示。

  • 相关阅读:
    在线漏洞检测网站
    渗透测试工具库
    端口利用解析
    Linux安全脚本
    Linux常见系统故障
    Oracle
    Redis和MongoDB区别
    MHA在监控和故障转移时都做了什么
    Oracle 11g Dataguard参数详解
    Oracle
  • 原文地址:https://www.cnblogs.com/daixixi/p/11861105.html
Copyright © 2011-2022 走看看