【发布时间】:2021-03-01 08:08:47
【问题描述】:
问题
我想防止触发一个 useEffect 挂钩,该挂钩在依赖数组中包含一个 useState 值。为了清楚起见,请看示例。
详解
在初始化过程中,表单会设置一些值,因此我定义了一个标志以防止在完全初始化之前执行其他效果,但我也不想在初始化标志状态更改时触发第二个效果.
我能否以某种方式阻止对 isInitialization 状态的跟踪?
我找不到可以解决我的问题的线程。您是否愿意链接与此相关的线程?提前致谢。
示例
export function SomeComponent(props) {
const [form] = useForm();
const [settings, setSettings] = useState(props.initialSettings);
const [isInitialization, setIsInitialization] = useState(true);
/**
* Updates the form settings state, just for initialization
*/
useEffect(() => {
if (isInitialization) {
form.setFieldsValue({
...settings,
});
setIsInitialization(false); // <-- This should not trigger any useEffect
}
}, [settings, form, isInitialization]);
useEffect(() => {
if (props.settingsChanges && !isInitialization) {
props.settingsChanges(settings, isValid && hasRequiredFields);
}
}, [settings, props, isInitialization]);
}
【问题讨论】:
-
移除所有效果依赖,这样效果回调只在组件挂载时运行一次。 React 官方文档是一个很棒的资源:@987654321@.
-
但是初始化过程需要
settings, form。我该怎么做呢? -
您可以在效果中使用变量,而无需将它们添加到依赖数组中。添加它们会使效果在值更改时运行。
-
依赖仅用于重新触发效果,它们不用作函数的参数或类似的东西,效果保证至少运行一次。
-
您是否有机会增强您的 useForm 挂钩以接受 initialFieldValues?因为你的这种方法在我看来是错误的解决方法。
标签: javascript reactjs