Reactjs 仅在卸载时对效果清理作出反应

Reactjs 仅在卸载时对效果清理作出反应,reactjs,react-hooks,Reactjs,React Hooks,我想在组件卸载时触发警报,如下所示: const [checked, setChecked] = useState(false); useEffect(() => { return () => { if(checked) alert("Hi") }; }, []); ... 但是,该效果不会在更改时更新选中的状态。但是,当将依赖项从[]更改为[选中]时,可以修复此问题。但是,这会在每次渲染时触发警报,而不是在卸载时触发警报。但我只想在下马时触发它

我想在组件卸载时触发警报,如下所示:

const [checked, setChecked] = useState(false);

useEffect(() => {
    return () => {
        if(checked) alert("Hi")
    };
}, []);

...

但是,该效果不会在更改时更新
选中的
状态。但是,当将依赖项从
[]
更改为
[选中]
时,可以修复此问题。但是,这会在每次渲染时触发警报,而不是在卸载时触发警报。但我只想在下马时触发它。如何使用react钩子实现这一点?

您可以将checked in的最新值存储在ref中,然后从useffect访问它

  const [checked, setChecked] = useState(false);
  const checkedRef = useRef(checked);

  useEffect(() => {
    checkedRef.current = checked;
  }, [checked]);

  useEffect(() => {
    return () => {
      if (checkedRef.current) alert("Hi");
    };
  }, []);
因为引用不会触发更新,所以第二个useEffect只运行一次, 但是第一个useEffect将确保checkedRef.current具有最新的值。

您写道,“但是,该效果在更改时不会更新选中的状态。”这意味着什么?是否希望您的效果在卸载时更新状态?试图了解你想要的行为是什么。