useState() 如何在这里更新我的数据?奇怪的
How is useState() updating my data here? STRANGE
我有来自 movie-api 的数据,我想根据 select 菜单进行排序,可以按年份降序排列,也可以按标题字母顺序排列。
虽然我只在排序函数中更新状态,没有在任何地方使用变量,但已经映射出的数据在不同的数组中会相应地更新。我猜它与两个不同变量中的每一个的第一次状态变化有某种关系?
知道我应该如何正确解决这个问题以及为什么会这样吗?
const sortData = (e) => {
if (e === "year"){
const yearData = data.sort(function(a, b) {
const yearA = a.Year;
const yearB = b.Year;
if (yearA < yearB) {
return -1;
}
if (yearA > yearB) {
return 1;
}
return 0;
});
setYearData(yearData);
}
if (e === "title") {
const titleData = data.sort(function(a, b) {
const titleA = a.Title.toUpperCase();
const titleB = b.Title.toUpperCase();
if (titleA < titleB) {
return -1;
}
if (titleA > titleB) {
return 1;
}
return 0;
});
setTitleData(titleData);
}
}
Array.sort()
,在你的例子中 data.sort()
更新 除了返回原始数组。似乎您的 data
变量是某种全局变量,在 sort()
期间发生了变化。
sort() 方法就地对数组的元素进行排序,因此数据(状态)在没有使用 setState 的情况下发生了变化(这可能会导致执行过程中发生一些不可预测的情况)
您可以在数组的副本上使用 sort() 方法,因此它不会影响您的状态数组,我想这个更改可能会起作用:
使用[...data].sort(...)
代替data.sort(...)
我有来自 movie-api 的数据,我想根据 select 菜单进行排序,可以按年份降序排列,也可以按标题字母顺序排列。
虽然我只在排序函数中更新状态,没有在任何地方使用变量,但已经映射出的数据在不同的数组中会相应地更新。我猜它与两个不同变量中的每一个的第一次状态变化有某种关系?
知道我应该如何正确解决这个问题以及为什么会这样吗?
const sortData = (e) => {
if (e === "year"){
const yearData = data.sort(function(a, b) {
const yearA = a.Year;
const yearB = b.Year;
if (yearA < yearB) {
return -1;
}
if (yearA > yearB) {
return 1;
}
return 0;
});
setYearData(yearData);
}
if (e === "title") {
const titleData = data.sort(function(a, b) {
const titleA = a.Title.toUpperCase();
const titleB = b.Title.toUpperCase();
if (titleA < titleB) {
return -1;
}
if (titleA > titleB) {
return 1;
}
return 0;
});
setTitleData(titleData);
}
}
Array.sort()
,在你的例子中 data.sort()
更新 除了返回原始数组。似乎您的 data
变量是某种全局变量,在 sort()
期间发生了变化。
sort() 方法就地对数组的元素进行排序,因此数据(状态)在没有使用 setState 的情况下发生了变化(这可能会导致执行过程中发生一些不可预测的情况)
您可以在数组的副本上使用 sort() 方法,因此它不会影响您的状态数组,我想这个更改可能会起作用:
使用[...data].sort(...)
代替data.sort(...)