让我尽可能清楚地解释这个问题。我有几个排序函数,我想在一个名为queryFilter的状态中设置它们,以便用户可以选择排序方法,排序方法会根据他们的请求进行更改。它工作得很好,直到我创建了一个状态,我不知道为什么。
因此,让我向您展示什么是有效的:
const sortHighestSummerTemp = (filteredCountries) => {
return filteredCountries.sort(
(a, b) => b.avsummertemp20802099 - a.avsummertemp20802099
);
};
const sortHighestWinterTemp = (filteredCountries) => {
return filteredCountries.sort(
(a, b) => b.avwintertemp20802099 - a.avwintertemp20802099
);
};
const sortMostHotDays = (filteredCountries) => {
return filteredCountries.sort(
(a, b) => b.avdaysabove95F20802099 - a.avdaysabove95F20802099
);
};
const [queryFilter, setQueryFilter] = useState(''); ⬅️
const [filteredCountries, setFilteredCountries] = useState(
sortMostHotDays(initialState.filter(matchesSearch).filter(matchesContinent)) ⬅️
);这行得通,我的数据在sortMostHotDays上排序。然而,现在当我创建一个状态,让它可以改变时,它不再工作了:
const sortHighestSummerTemp = (filteredCountries) => {
return filteredCountries.sort(
(a, b) => b.avsummertemp20802099 - a.avsummertemp20802099
);
};
const sortHighestWinterTemp = (filteredCountries) => {
return filteredCountries.sort(
(a, b) => b.avwintertemp20802099 - a.avwintertemp20802099
);
};
const sortMostHotDays = (filteredCountries) => {
return filteredCountries.sort(
(a, b) => b.avdaysabove95F20802099 - a.avdaysabove95F20802099
);
};
const [queryFilter, setQueryFilter] = useState({ sortMostHotDays }); ⬅️
const [filteredCountries, setFilteredCountries] = useState(
queryFilter(initialState.filter(matchesSearch).filter(matchesContinent)) ⬅️
);它给我一个错误:"TypeError: queryFilter不是一个函数“。我在这里做错了什么?我该如何解决它才能让它正常工作呢?
感谢您的回复!
更新:
我尝试创建一个排序函数,它根据键进行排序。然而,这并没有改变我的数据。
function sortBy(filteredCountries, sortKey) {
return [...filteredCountries].sort((a, b) => a[sortKey] - b[sortKey]);
}
const [queryFilter, setQueryFilter] = useState(
filteredCountries.avwintertemp20802099
);
const filteredData = sortBy(filteredCountries, queryFilter);
}这不会改变任何事情,但也不会给出任何错误。
发布于 2021-01-29 17:49:03
问题在下面这一行:
const [queryFilter, setQueryFilter] = useState({ sortMostHotDays });您已将{ sortMostHotDays }添加为初始状态。这确实不是一个函数,而是一个对象。它可以翻译为:
{
sortMostHotDays: [Function]
}如果你这样声明它:它应该可以工作。
const [queryFilter, setQueryFilter] = useState(sortMostHotDays);https://stackoverflow.com/questions/65952093
复制相似问题