【发布时间】:2020-01-27 04:37:22
【问题描述】:
我正在尝试了解以下涉及 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 究竟什么时候被设置?
【问题讨论】:
标签: reactjs rendering state react-hooks rerender