Я пытаюсь понять порядок выполнения следующего фрагмента кода, включающего состояния React Hook:
const App = () => {
const [ searchedCountry, setSearchedCountry ] = useState('');
const [ filteredArr, setFilteredArr ] = useState([]);
const [ filteredLength, setFilteredLength ] = useState(0);
//...
const filterCountries = (event) => {
event.preventDefault();
setFilteredArr(countries.filter(country => country.name.includes(searchedCountry)));
setFilteredLength(filteredArr.length);
console.log("filtered arr length", filtered.length);
}
//...
}
Когда срабатывает filterCountries
, setFilteredArr
устанавливает состояние, filteredArr
,в массив, отфильтрованный по запросу.Однако когда именно filteredArr
устанавливается?
filteredArr.length
возвращает 0
, то есть filteredArr
еще не установлено, даже после вызова setFilteredArr
.
Сначала я подумал, что, выполнив setFilteredArr
, компонент перерисовывается, в результате чего выполнение пропускает вызовы методов после setFilteredArr
.Это объясняет, почему filteredArr.length
равен 0
.Тем не менее, console.log
по-прежнему вызывается, то есть после повторного рендеринга компонента порядок выполнения фактически возобновляется.
Что происходит?Когда точно устанавливается filteredArr
?