例如,假设我有一个钩子用于生成API请求:
function useApi(...) {
const [state, setState] = useState({ fetching: false });
useEffect(() => {
setState({ fetching: true });
fetch(...)
.then(() => setState({ fetching: false }));
}, [...]);
return { fetching: state.fetching };
}
有时,useApi
的状态会影响渲染:
function Foo() {
const { fetching } = useApi(...);
if (fetching) {
return 'Loading';
}
return 'Foo';
}
其他时候,它不会影响渲染:
function Bar() {
useApi(...);
return 'Bar';
}
当useApi
中的setState
不影响渲染时,是否可以避免重新渲染组件?
我知道这不会对性能产生太大影响,但很高兴知道这是否可能。
您可以创建一个boolean
标志来确定是否要及时更改useApi
挂钩状态。
const { fetching } = useApi(..., flag);
然后在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 };
}