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)

正常显示。

原文地址:https://www.cnblogs.com/daixixi/p/11861105.html