簡體   English   中英

反應 setState() 不觸發重新渲染

[英]react setState() not triggering re-render

我有一個從其他文件接收數據並設置為 state 的組件:

const [sortedPlans, setSortedPlans] = useState(
    data.Plans.sort((a, b) => b.IndustryGrade - a.IndustryGrade)
  );//data is from external file

設置 state、排序數據並呈現初始屏幕后,我有 function 每當調用 sortedPlans 時對其進行排序:

const sort = (event) => {
    console.log(event);
    const newArr = sortedPlans.sort((a, b) => {
      return b[event] - a[event];
    });
    console.log(newArr);
    return setSortedPlans(newArr);
  };

問題是這永遠不會觸發組件的重新渲染。 我希望當我設置新的 state 時能夠在 jsx 中看到它。 為什么當我使用 console.log(newArr) 結果排序正確,但 state 的設置沒有觸發重新渲染? 這是沙箱:

https://codesandbox.io/s/charming-shape-r9ps3p?file=/src/App.js

給你 go: Codesandbox 演示

您應該首先對要修改的數組進行淺表復制。 然后將該數組設置為新的 state。然后它會重新呈現組件,您就可以按照自己的意願進行過濾。

  const sort = (event) => {
    console.log(event);
    //shallow copying the state. 
    const newArr = [...sortedPlans];

    //modifying the copy
    newArr.sort((a, b) => {
      return b[event] - a[event];
    });
    console.log(newArr); //results here are correctly sorted as per event
    
    //setting the state to the copy triggers the re-render.
    return setSortedPlans(newArr);
  };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM