largeQ
2023-07-20 09:51:05
例如,假設(shè)我有一個(gè)用于發(fā)出 API 請(qǐng)求的鉤子:function useApi(...) { const [state, setState] = useState({ fetching: false }); useEffect(() => { setState({ fetching: true }); fetch(...) .then(() => setState({ fetching: false })); }, [...]); return { fetching: state.fetching };}有時(shí), 的狀態(tài)useApi會(huì)影響渲染:function Foo() { const { fetching } = useApi(...); if (fetching) { return 'Loading'; } return 'Foo';}其他時(shí)候,它不會(huì)影響渲染:function Bar() { useApi(...); return 'Bar';}當(dāng)setStateinuseApi不影響渲染時(shí),是否可以避免重新渲染組件?我知道這不會(huì)對(duì)性能產(chǎn)生太大影響,但很高興知道這是否可行。
1 回答

鴻蒙傳說(shuō)
TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以創(chuàng)建一個(gè)boolean標(biāo)志來(lái)確定是否要useApi及時(shí)更改掛鉤狀態(tài)。
const { fetching } = useApi(..., flag);
然后是內(nèi)useApi鉤:
function useApi(..., flag) {
const [state, setState] = useState({ fetching: false });
useEffect(() => {
flag && setState({ fetching: true });
fetch(...)
.then(() => {
flag && setState({ fetching: false }));
// do other stuff
});
}, [...]);
return { fetching: state.fetching };
}
添加回答
舉報(bào)
0/150
提交
取消