在項(xiàng)目中辅鲸,以前用的dva來(lái)管理數(shù)據(jù)流治筒,其中使用的是dva中connect來(lái)連接組件與model,
/**
* spareRepertory: 命名空間的名字羊赵,項(xiàng)目中唯一
* loading:監(jiān)聽(tīng)effects的方法
*/
export default connect(({ spareRepertory, loading }: any) => ({
// spareRepertory的所有值趟佃,有一個(gè)值改變都會(huì)導(dǎo)致組件重新渲染
spareRepertory,
// 獲取effects中某個(gè)方法的執(zhí)行狀態(tài)(開(kāi)始執(zhí)行為true,結(jié)束執(zhí)行變?yōu)閒alse)
lisLoading: loading.effects["spareRepertory/queryRepertoryList"]
}))(List)
自從dva有了bate版本后扇谣,同事重構(gòu)部分項(xiàng)目時(shí),直接將connect刪掉闲昭,使用useDispatch與useSelector罐寨,然后此時(shí)又不能直接監(jiān)聽(tīng)dva的model文件中effects的方法,導(dǎo)致函數(shù)組件中不能直接使用loading序矩,必須手動(dòng)控制loading的狀態(tài)鸯绿。
/** 使用useDispatch獲取dispatch,可以調(diào)用model的方法 */
const dispatch = useDispatch();
/** 使用useSelector獲取項(xiàng)目中所有model的命名空間簸淀,并取某一個(gè)命名空間里的某一個(gè)值 */
const filterList = useSelector<any, SpareRepertory.filterValue>(
({ spareRepertory }) => spareRepertory.filterParam
);
/** 在model中手動(dòng)控制loading狀態(tài)瓶蝴,比如請(qǐng)求接口造成的等待 */
const loading = useSelector<any, boolean>(({ spareRepertory }) => spareRepertory.loading);
在不考慮性能的前提下,這樣不是增加了代碼嗎租幕?畢竟需要我們自己控制loading的狀態(tài)舷手,用connect時(shí)可直接需要獲取loading,這個(gè)loading在effects開(kāi)始執(zhí)行時(shí)變?yōu)閠rue令蛉,方法執(zhí)行完變?yōu)閒alse聚霜。所以狡恬,我們?yōu)槭裁匆褂胾seSelector和useDispatch呢珠叔?或者說(shuō),在哪些場(chǎng)景下使用useSelector和useDispatch更好呢弟劲?
祷安。。兔乞。汇鞭。。庸追。未完待續(xù)(因?yàn)槲易约憾歼€二懂二懂的??)
各位大佬霍骄,碰巧你會(huì)的話(huà),我們可以交流交流啊~~??