【问题标题】:React.js sort data in useEffectReact.js 在 useEffect 中对数据进行排序
【发布时间】:2021-08-02 01:31:05
【问题描述】:

我有一个 useState 挂钩名称故事。

const [stories, setStories] = useState([
{
      name: "1st Story",
      sid: 1,
      apartmentDetails: [],
},{
      name: "2nd Story",
      sid: 2,
      apartmentDetails: [],
}
]); 

现在我想在 1st Story 中添加 apartmentDetails。为了实现此功能,我正在执行以下操作。

let story = stories.find((story) => story.sid == storyID);
    const storyWithDetails = {
      ...story,
      appartmentDetails: [
        ...story.appartmentDetails,
        {
          apartment_name: apratmentName,
          apartment_num: apratmentNum,
          apartment_type: apartmentType,
          areaDetails: [],
        },
      ],

但它通过将 1st Story 放在数组的最后来重新排列故事。 我使用 useEffect 挂钩对其进行排序

  useEffect(() => {
    setStories(stories.sort((a, b) => parseInt(a.sid) - parseInt(b.sid)));
    console.log(stories);
  }, [stories]);

日志将排序后的故事返回给我,但在 HTML/JSX 中它不起作用。

【问题讨论】:

  • 你的意思是它不起作用,你在页面中的输出是什么
  • 是的。没有在页面中获得排序的故事

标签: arrays reactjs sorting use-effect use-state


【解决方案1】:

Array.sort() 对数组进行就地排序。

尝试将其存储到另一个变量并设置状态。

喜欢,

useEffect(() => {
    const newStories = [...stories];
    newStories.sort((a, b) => parseInt(a.sid) - parseInt(b.sid));
    setStories(newStories);
  }, [stories]);

警告: useEffect() 内的 setStories()[stories] 的依赖关系可能会导致无限循环。但核心思想与上述相同。

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

【讨论】:

  • cdode 不工作
  • 您是否也尝试了编辑后的代码?这不是太有效了吗?
  • 如果我编辑它可以工作,但它应该会自动工作
  • array.sort 实际上也返回了一个排序后的数组。对吧?
  • @HamzaAfzal 编辑的代码有效,因为您基本上使用的是变异数组。如果你改变状态,React 不会理解状态已经改变。所以你需要使用扩展运算符来创建一个新数组并对该数组进行排序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 2014-11-09
  • 2017-08-05
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多