用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);
初级

第一:由于Array.prototype.sort()已存在,因此在进行排序之前先克隆:

const sorted = [...dogList].sort((a, b) => {
  return b.age - a.age;
});

如果没有这个,更改检测将无法检测到更改的阵列。

您在上调用map dogs固定:

  return (
    <div>
      {dogList.map((dog, i) => {
        return <p key={i}>{dog.name}</p>;
      })}
      <div onClick={sortByAge}>sort by age</div>
    </div>
  );

演示:https : //jsfiddle.net/acdcjunior/kpwb8sq2/1/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章