亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

React 中的重新渲染過多

React 中的重新渲染過多

冉冉說 2022-05-22 10:03:55
我想在函數中返回 setState,但我得到了錯誤:rerenders 太多。在我的情況下如何避免這種情況?    const [selectedItems, setState] = React.useState([]);      const [arr, setArr] = React.useState([]);      const handleChange = selectedItems => {        setState(selectedItems);      };      const search = selectedItems => {        selectedItems =          selectedItems.length < 2            ? selectedItems.join(",").toLowerCase()            : selectedItems                .slice(selectedItems.length - 1)                .join(",")                .toLowerCase();        let arrayOfMatchedObjects = elements.filter(object => {          return JSON.stringify(object)            .toString()            .toLowerCase()            .includes(selectedItems);        });        return setArr(arrayOfMatchedObjects); //here i setSate      };鏈接:https ://codesandbox.io/s/divine-frost-skle2
查看完整描述

2 回答

?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

刪除這一行:

  console.log(search(selectedItems));

并看到錯誤消失了。發生這種情況是因為基本上在您調用的渲染內部search- 它設置了一個狀態并導致重新渲染(因此是循環)。在這種情況下,您從函數返回它并不重要(盡管您想以這種方式返回它很奇怪)。


查看完整回答
反對 回復 2022-05-22
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

好的,突出的一件事是你有這個聲明


const [selectedItems, setState] = React.useState([]);

然后在你擁有之后


  const handleChange = selectedItems => {

    setState(selectedItems);

  };

對我來說,函數handleChange 中的兩個“selectedItems”中的哪一個將在setState 中調用有點模棱兩可。即傳入的變量或useState中聲明的變量。


先解決這個問題!


查看完整回答
反對 回復 2022-05-22
  • 2 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號