如果我在 React 的 useEffect 第二个参数中添加多个依赖会怎样?
What if I add multiple dependency in React's useEffect second parameter?
例如,如果我将 useEffect
挂钩设置为 useEffect(() => {...},[a,b])
。如果 [a,b] 之一发生变化或者 [a,b] 都发生变化,useEffect
会被触发吗?
它会在任何一个改变时触发。想到它的方式是你告诉 React:
a
and b
are the things that I am using inside this effect, so if either of them
change, my effect will need to cleanup the old version and re-execute with the updated values.
这是一个简单的例子,可以让您看到行为:
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);
例如,如果我将 useEffect
挂钩设置为 useEffect(() => {...},[a,b])
。如果 [a,b] 之一发生变化或者 [a,b] 都发生变化,useEffect
会被触发吗?
它会在任何一个改变时触发。想到它的方式是你告诉 React:
a
andb
are the things that I am using inside this effect, so if either of them change, my effect will need to cleanup the old version and re-execute with the updated values.
这是一个简单的例子,可以让您看到行为:
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);