我在用react钩子做一个简单的数组排序,但是它没有更新状态,有人能指出我在做什么吗?
import React, { useState } from "react";
import ReactDOM from "react-dom";
import "./styles.css";
const dogs = [{ name: "fido", age: 22 }, { name: "will", age: 50 }];
function App() {
const [dogList, setDogList] = useState(dogs);
const sortByAge = () => {
const sorted = dogList.sort((a, b) => {
return b.age - a.age;
});
setDogList(sorted);
alert(sorted[0].name);
};
return (
<div>
{dogs.map((dog, i) => {
return <p key={i}>{dog.name}</p>;
})}
<div onClick={sortByAge}>sort by age</div>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
3条答案
按热度按时间kqlmhetl1#
第一:因为
Array.prototype.sort()
已经就绪,所以在排序之前克隆:如果不这样做,更改检测将不会检测到阵列更改。
在
dogs
上调用map。修复:演示:https://jsfiddle.net/acdcjunior/kpwb8sq2/1/
332nm8kg2#
这是使用钩子的代码
tzxcd3kk3#
按名称排序示例...