在我的React应用程序中,我有一个自定义的hook,它在内部保存了一个useState值,但自定义的hook本身不返回任何值。如果其内部useState的值发生更改,是否会导致调用此自定义hook的组件重新渲染?
是的,它会重新渲染组件。自定义钩子有助于在不同的组件中重用状态逻辑,但最终,当您使用自定义钩子时,其中所有状态和效果都是您调用自定义钩子的组件的一部分。
因此,是的,在自定义钩子内部更改状态将重新渲染您使用自定义钩子的组件,即使它不返回任何内容。
不,它不会重新渲染组件。
来自文档(https://reactjs.org/docs/hooks-custom.html):
使用相同 Hook 的两个组件共享状态吗? 不会。自定义 Hooks 是一种重用有状态逻辑的机制 (例如设置订阅并记住当前值),但每次使用一个自定义 Hook 时, 其中所有状态和效果都被完全隔离。
示例 Hook:
export function useExample () {
const [saveCount,setSaveCount] = useState(0);
console.log('Internal saveCount value',saveCount);
const save=()=>{
return fetch(blah, blah, blah).then((result)=>{
setSaveCount((prev)=>{
return prev+1;
});
return result;
});
}
return {
saveCount:saveCount,
save:save
}
}
使用它的示例组件:
export function MyComponent (props) {
const { saveCount, save } = useExample();
console.log('External saveCount value',saveCount);
const onClick=()=>{
save();
}
useEffect(()=>{
console.log('Effect saveCount value',saveCount);
},[saveCount]);
return (
<Button onClick={onClick}>Blah, blah, blah</Button>
)
}