gpt4 book ai didi

reactjs - React Hooks - 对象排序时组件不更新

转载 作者:行者123 更新时间:2023-12-02 03:08:51 24 4
gpt4 key购买 nike

因此,我正在尝试按位置按字母顺序对我的数据进行排序。我下面的内容似乎有效,并且我的控制台日志输出了正确的顺序 - 但是,我的组件似乎没有重新渲染。我不确定它是否只是不重新渲染,或者 useEffect 是否启动并再次默认排序?对此还很陌生,所以我不完全确定!

我尝试了以下操作,进行了一些简单的文本更改,并且应用程序按预期更新。

不确定我哪里出错了?

任何帮助都会很棒。谢谢!

import React, { useState, useEffect } from 'react';
import axios from 'axios';

const App = () => {

const [data, setData] = useState([]);

useEffect(() => {
const fetchData = async () => {
const result = await axios('/api/somestuff');
setData(result.data.default.sort((a,b) => a.brand.localeCompare(b.brand)));
};
fetchData();
}, []);

const sortLocation = () => {
setData(data.sort((a,b) => a.location.localeCompare(b.location)));
console.log(data)
}

return (
<>
<button onClick={() => sortLocation()}>Sort by location</button>

{data && data.map((item, index) => (
<span key={index}>
<p>{item.brand}</p>
<p>{item.location}</p>
</span>
))}
</>
);

}

export default App;

最佳答案

好吧,你在这里所做的排序是就地排序,所以基本上它和以前的数组相同,因为数组是引用类型是Javascript你需要创建一个新数组来更新状态,你可以这样做

const sortLocation = () => {
const dataArray = [ ...data]
setData(dataArray.sort((a,b) => a.location.localeCompare(b.location)));
console.log(data)
}

希望对你有帮助

关于reactjs - React Hooks - 对象排序时组件不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58248621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com