【发布时间】:2022-01-28 02:36:32
【问题描述】:
我需要为获取的数据添加排序(升序/降序)。
我从 API 端点获取所有数据。我映射该数组中的每个对象以显示在单独的组件卡中。但是,一旦我选择从降序名称对数据进行排序,我会快速更改组件,如果它们从 Z 排序到 A,但它会立即转换回初始获取状态(从 A 到 Z)。
你能告诉我问题出在哪里吗?我不知道为什么,但感觉排序数组没有保存在我用来映射所有卡片的状态“数据”中。
import { useState } from 'react';
import { useEffect } from 'react';
import './styles/main.scss';
import Card from './components/Card/Card';
import { v4 as uuidv4 } from 'uuid';
function App() {
const [data, setData] = useState([]);
const [sortType, setSortType] = useState('default');
useEffect(() => {
fetchData();
sortData();
}, [sortType]);
const fetchData = async () => {
const response = await fetch(
'https://restcountries.com/v2/all?fields=name,region,area'
);
const data = await response.json();
setData(data);
};
function sortData() {
let sortedData;
if (sortType === 'descending') {
sortedData = [...data].sort((a, b) => {
return b.name.localeCompare(a.name);
});
} else if (sortType === 'ascending') {
sortedData = [...data].sort((a, b) => {
return a.name.localeCompare(b.name);
});
} else {
return data;
}
setData(sortedData);
}
return (
<div className='content'>
<header className='content__header'>
<h1>Header placeholder</h1>
</header>
<div className='wrapper'>
<div className='wrapper__sort-buttons'>
<select
defaultValue='default'
onChange={(e) => setSortType(e.target.value)}
>
<option disabled value='default'>
Sort by
</option>
<option value='ascending'>Ascending</option>
<option value='descending'>Descending</option>
</select>
</div>
<ul className='wrapper__list'>
{data.map((country) => {
country.key = uuidv4();
return (
<li key={country.key}>
<Card
name={country.name}
region={country.region}
area={country.area}
/>
</li>
);
})}
</ul>
</div>
</div>
);
}
export default App;
这是我暂时得到的:
然后又回到初始状态:
【问题讨论】:
标签: reactjs sorting fetch fetch-api