reactjs - 如果我在 React 的 useEffect 第二个参数中添加多个依赖项怎么办?
问题描述
例如,如果我将useEffect
钩子设为useEffect(() => {...},[a,b])
. useEffect
如果 [a,b] 之一发生变化或两个 [a,b] 都发生变化,会被解雇吗?
解决方案
当其中任何一个发生变化时,它将触发。思考它的方式是你告诉 React:
a
并且b
是我在这个效果中使用的东西,所以如果它们中的任何一个发生变化,我的效果将需要清理旧版本并使用更新的值重新执行。
这是一个简单的示例,可让您查看行为:
import React, { useState, useEffect } from "react";
import ReactDOM from "react-dom";
function App() {
const [dependency1, setDependency1] = useState(1);
const [dependency2, setDependency2] = useState(1);
useEffect(
() => {
console.log("only dependency1", dependency1, dependency2);
},
[dependency1]
);
useEffect(
() => {
console.log("dependency1 and dependency2", dependency1, dependency2);
},
[dependency1, dependency2]
);
return (
<div className="App">
<button
onClick={() => {
setDependency1(prev => prev + 1);
}}
>
Change dependency1
</button>
<button
onClick={() => {
setDependency2(prev => prev + 1);
}}
>
Change dependency2
</button>
<button
onClick={() => {
setDependency1(prev => prev + 1);
setDependency2(prev => prev + 1);
}}
>
Change both
</button>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
推荐阅读
- typescript - 错误:在“tsconfig”或“jsconfig”中设置“experimentalDecorators”选项以删除此警告
- php - 如何在 yii2 gridview 中根据条件隐藏列?
- azure-devops - 在 azure devops 中使用 azure powershell 内联任务获取 azure 功能键并将其放入 keyvault 的脚本
- java - Intellij 将私有字段及其访问器方法移动/重构到不同的类
- node.js - 无法保存 ids 数组 mongo
- elasticsearch - 密集向量数据类型的 Elasticseach 错误,值为空
- c# - 在命令提示符下工作的命令在 C# 中不起作用
- python - 如何通过读取文本文件中提到的日期来计算总天数?
- mysql - 如何从两个表中获取空值 WHERE user_id IS NULL 在 Node.js MYSQL 中不起作用
- python - Django:与多对多关系相关的问题