reactjs - 组件挂载后由上下文更改触发的 useEffect
问题描述
context
我正在尝试在using上运行一个函数useEffect
,但在组件安装之后。否则,该函数在第一次加载上下文时运行,并给出错误的结果。我很想在加载后运行的useEffect
另一个里面嵌套一个,但我不能。useEffect
如何触发useEffect
等到 componentDidLoad 运行?我需要将我的功能组件恢复为类功能吗?
这是我运行的效果
useEffect(() => {
let count = Object.keys(context).filter((x) => context[x] !== "").length;
numChange = count;
}, [context]); <=== run AFTER the original update of the context
澄清。上下文是一个对象,我计算了有多少对象属性具有值。由于最初计算上下文(假设 10 个属性中有 5 个已经具有值),因此“数字 === 5”。但是我想要做的是在组件安装时在上下文中计算具有值的初始属性数量之后的更改。因此,如果 n = 5,我想计算在 n 之后获得值的任何属性。
解决方案
当你useEffect
有一个依赖并且你想像 a 一样表现它时componentDidMount
,添加一个 ref 检查就足够了:
const isMounted = useRef(false);
useEffect(() => {
if (!isMounted.current) {
let numChange = Object.keys(context).filter((x) => context[x] !== "")
.length;
setState(numChange);
isMounted.current = true;
}
}, [context]);
推荐阅读
- excel - 使用类/标签名称提取数据并限制结果
- python - 如何在python中选择声音设备
- ruby-on-rails - 评论文章应用程序中 Ruby on Rails 中模型的未定义方法
- typescript - 理解 Typescript 中的嵌套尖括号
- python - PyKinectv2 身体跟踪计数
- objective-c - 如何在 iOS 上将 minLength 属性添加到 React Native TextInput?
- python - bash:Visual Studio Code 中意外标记“&”附近的语法错误
- reactjs - 将 State 初始化为 Props 会创建一个链接
- javascript - 如何访问我正在工作的当前目录之外的 user._id 对象?
- java - java android androidx.multidex.MultiDexApplication 无法转换为 android.app.Activity 错误