在项目中,以前用的dva来管理数据流,其中使用的是dva中connect来连接组件与model,
/**
* spareRepertory: 命名空间的名字,项目中唯一
* loading:监听effects的方法
*/
export default connect(({ spareRepertory, loading }: any) => ({
// spareRepertory的所有值,有一个值改变都会导致组件重新渲染
spareRepertory,
// 获取effects中某个方法的执行状态(开始执行为true,结束执行变为false)
lisLoading: loading.effects["spareRepertory/queryRepertoryList"]
}))(List)
自从dva有了bate版本后,同事重构部分项目时,直接将connect删掉,使用useDispatch与useSelector,然后此时又不能直接监听dva的model文件中effects的方法,导致函数组件中不能直接使用loading,必须手动控制loading的状态。
/** 使用useDispatch获取dispatch,可以调用model的方法 */
const dispatch = useDispatch();
/** 使用useSelector获取项目中所有model的命名空间,并取某一个命名空间里的某一个值 */
const filterList = useSelector<any, SpareRepertory.filterValue>(
({ spareRepertory }) => spareRepertory.filterParam
);
/** 在model中手动控制loading状态,比如请求接口造成的等待 */
const loading = useSelector<any, boolean>(({ spareRepertory }) => spareRepertory.loading);
在不考虑性能的前提下,这样不是增加了代码吗?毕竟需要我们自己控制loading的状态,用connect时可直接需要获取loading,这个loading在effects开始执行时变为true,方法执行完变为false。所以,我们为什么要使用useSelector和useDispatch呢?或者说,在哪些场景下使用useSelector和useDispatch更好呢?
。。。。。。未完待续(因为我自己都还二懂二懂的😴)
各位大佬,碰巧你会的话,我们可以交流交流啊~~😝
网友评论