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)

正常顯示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM