Басово, ловушка полагается на индекс вызова. React не знает, что вернул данный useState()
, поскольку он указывает на предыдущий рендеринг, но он знает, что первый вызов useState()
этим компонентом вернул [1,2]
в качестве его значения, а второй вызов вернул false
. Теперь, если единственное, что знает response, - это каков был данный возврат для данного индекса вызова, как вы думаете, что могло бы произойти, если бы я мог написать такой компонент:
const [a, setA] = React.useState([1,2,3]);
let c;
if(a === [3,2,1]){
c = React.useState('X');
}
const [b, setB] = React.useState(false);
React.useEffect(() => setA([3,2,1]), []);
сейчас, response знает из сначала визуализируйте, что первый вызов возвращает [1,2,3], а второй - ложь. затем эффект повторно визуализирует компонент, теперь это не первая визуализация, поэтому первый вызов вернет состояние [3,2,1]
, так как он был обновлен, второй вызов (тот c = ...
) вернет false, но затем response видит третий вызов , что он должен вернуть?
С точки зрения реакции, это не имеет смысла, с вашей точки зрения, это может привести к огромному количеству ошибок и проблем.
Конечно, ни мое базовое c объяснение, ни React не так уж и много, поэтому пришедшие источники, Дэн Абрамов, один из людей, работающих в React, имеет очень длинный и подробный пост в своем блоге об этом, вы можете его найти здесь . Он также публикует много других материалов о том, как работает React за кулисами, это стоит прочитать.