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)
正常显示。
    (∩_∩)-----代码改变生活。
 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号