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)
正常显示。
(∩_∩)-----代码改变生活。