Например, если я сделаю крючок useEffect как useEffect(() => {...},[a,b]). Будет ли useEffect уволен, если изменится один из [a,b] или когда изменятся оба [a,b]?
Или, если есть возможность, просто протестируйте сами :)
Но когда мы его протестируем, он может дать ответ, но вы не можете протестировать все пограничные случаи и быть уверенным в этом. Почему бы просто не добавить строку в документацию, чтобы развеять все сомнения.





Он будет срабатывать при изменении любого из них. Можно подумать, что вы говорите React:
aandbare 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.info("only dependency1", dependency1, dependency2);
},
[dependency1]
);
useEffect(
() => {
console.info("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);
Похоже, он срабатывает, когда один из них меняется. Но почему в документации ничего не сказано об этом? Может быть, в будущем они прояснят это. Тем не менее спасибо за четкий ответ.
Команде React (которая живет и дышит этим материалом) нелегко предсказать, что будет и что не будет очевидным для людей. В документации объясняется назначение массива (из которого можно сделать вывод о том, каким должно быть поведение). Подробное описание всех пограничных случаев может затруднить поиск ключевых понятий и сделать вещи более сложными, чем они есть на самом деле. Если вы считаете, что документацию следует улучшить, отправьте пул реквест с изменениями, которые помогли бы вам это понять.
понятия не имею, поэтому я подал github.com/facebook/реагировать/вопросы/15068, что я настоятельно рекомендую вам сделать в будущем. Если официальная документация не охватывает вопрос, вы почти гарантированно не будете единственным человеком, который задается вопросом о том, что вас интересует, и спрашивать людей, которые делают то, что вы используете для улучшения документации, очень полезно для них. каждый.