首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:" state“不是函数,React state/ javascript

错误:" state“不是函数,React state/ javascript
EN

Stack Overflow用户
提问于 2021-01-29 17:45:08
回答 1查看 47关注 0票数 0

让我尽可能清楚地解释这个问题。我有几个排序函数,我想在一个名为queryFilter的状态中设置它们,以便用户可以选择排序方法,排序方法会根据他们的请求进行更改。它工作得很好,直到我创建了一个状态,我不知道为什么。

因此,让我向您展示什么是有效的:

代码语言:javascript
复制
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上排序。然而,现在当我创建一个状态,让它可以改变时,它不再工作了:

代码语言:javascript
复制
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不是一个函数“。我在这里做错了什么?我该如何解决它才能让它正常工作呢?

感谢您的回复!

更新:

我尝试创建一个排序函数,它根据键进行排序。然而,这并没有改变我的数据。

代码语言:javascript
复制
  function sortBy(filteredCountries, sortKey) {
    return [...filteredCountries].sort((a, b) => a[sortKey] - b[sortKey]);
  }

  const [queryFilter, setQueryFilter] = useState(
    filteredCountries.avwintertemp20802099
  );

  const filteredData = sortBy(filteredCountries, queryFilter);
  }

这不会改变任何事情,但也不会给出任何错误。

EN

回答 1

Stack Overflow用户

发布于 2021-01-29 17:49:03

问题在下面这一行:

代码语言:javascript
复制
const [queryFilter, setQueryFilter] = useState({ sortMostHotDays });

您已将{ sortMostHotDays }添加为初始状态。这确实不是一个函数,而是一个对象。它可以翻译为:

代码语言:javascript
复制
{
  sortMostHotDays: [Function]
}

如果你这样声明它:它应该可以工作。

代码语言:javascript
复制
const [queryFilter, setQueryFilter] = useState(sortMostHotDays);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65952093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档