小编Edm*_*lia的帖子

useEffect 模拟 componentWillUnmount 不返回更新状态

我有一个使用 useState 初始化状态的功能组件,然后通过输入字段更改该状态。

\n\n

然后,我有一个模拟 componentWillUnmount 的 useEffect 挂钩,以便在组件卸载之前,将当前更新的状态记录到控制台。但是,会记录初始状态而不是当前状态。

\n\n

这是我想要做的事情的简单表示(这不是我的实际组件):

\n\n
import React, { useEffect, useState } from \'react\';\n\nconst Input = () => {\n    const [text, setText] = useState(\'aaa\');\n\n    useEffect(() => {\n        return () => {\n            console.log(text);\n        }\n    }, [])\n\n    const onChange = (e) => {\n        setText(e.target.value);\n    };\n\n    return (\n        <div>\n            <input type="text" value={text} onChange={onChange} />\n        </div>\n    )\n}\n\nexport default Input;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我将状态初始化为“初始”。然后我使用输入字段来更改状态,假设我输入“新文本”。但是,当组件卸载时,控制台将记录“初始”而不是“新文本”。

\n\n

为什么会出现这种情况?如何在卸载时访问当前更新的状态?

\n\n

非常感谢!

\n\n

编辑:

\n\n

将文本添加到 useEffect 依赖项数组并不能解决我的问题,因为在我的现实场景中,我想要做的是根据当前状态触发异步操作,并且它不会 \xe2\x80\x99t每次 \xe2\x80\x9ctext\xe2\x80\x9d 状态更改时都可以有效地执行此操作。

\n\n

I\xe2\x80\x99m 正在寻找一种仅在组件卸载之前获取当前状态的方法。

\n

reactjs react-hooks use-effect

2
推荐指数
1
解决办法
1753
查看次数

标签 统计

react-hooks ×1

reactjs ×1

use-effect ×1