[英]React doesn't rerender on state update
I am displaying components on base of state which is an array.我在 state 的基础上显示组件,这是一个数组。 When I am trying to sort this state it doesn't rerender components rendered on base of it.
当我试图对这个 state 进行排序时,它不会重新渲染基于它呈现的组件。 I want to sort on base of sortBy state so when its being changed (using select) I invoke sorting function using useEffect().
我想在 sortBy state 的基础上进行排序,所以当它被更改时(使用 select),我使用 useEffect() 调用排序 function。 What am I doing wrong?
我究竟做错了什么?
const sortCountries = () => {
switch (sortBy) {
case sortBySwitchList.Alphabetically:
setCountriesArr((prev) =>
prev.sort((a, b) =>
a.name.common < b.name.common
? -1
: a.name.common > b.name.common
? 1
: 0
)
);
break;
case sortBySwitchList.AlphabeticallyReversed:
setCountriesArr((prev) =>
prev.sort((a, b) =>
a.name.common < b.name.common
? 1
: a.name.common > b.name.common
? -1
: 0
)
);
break;
default:
return;
}
};
const changeSortBy = (e) => {
setSortBy(e.target.value);
};
useEffect(() => {
sortCountries();
}, [sortBy]);
***part in which I am rendering***
{countriesArr.map((item) => {
return (
<CountryComponent
key={item.name.common}
flag={item.flags.png}
name={item.name.common}
population={item.population}
region={item.region}
capital={item.capital}
/>
);
})}
Sort
does sorting an Array in place (mutates the original array) so instead make a copy of it and then sort like so.. Sort
确实对 Array 进行了就地排序(改变了原始数组),因此请对其进行复制,然后像这样进行排序..
same for the other sort
you are doing:)你正在做的其他
sort
也是如此:)
setCountriesArr((prev) =>
[...prev].sort((a, b) =>
a.name.common < b.name.common
? -1
: a.name.common > b.name.common
? 1
: 0
)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.