標題
使用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)
正常顯示。