第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

回調函數(shù)不會自動重新渲染反應組件頁面

回調函數(shù)不會自動重新渲染反應組件頁面

慕尼黑8549860 2022-11-03 15:03:01
handleAddItem(s) {this.state.items[s.listName].push({name: s.newItem});this.render();} render() {    console.log("re-rendering");    return (      <div className="App">        <AddList addList={this.handleAddList.bind(this)} />        <div id="listsDiv" className="List">          <Lists lists={this.state.lists} items={this.state.items} addItem={this.handleAddItem.bind(this)} />        </div>      </div>    );  }我有一個名為 handleAddItem() 的回調函數(shù),由于某種原因,當在這個反應組件中調用 handleAddItem() 函數(shù)時,它不會自動調用渲染函數(shù)。我不得不手動調用渲染函數(shù),即使那樣,它也沒有做任何事情。任何人都可以幫助我理解為什么會發(fā)生這種情況以及我該如何解決它?
查看完整描述

3 回答

?
慕的地10843

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

您正在嘗試直接修改狀態(tài)數(shù)據(jù),但您不能。

您必須調用函數(shù) setState 來改變(更改)它的任何數(shù)據(jù)的狀態(tài)。

如何?

this.setState({theData: newState})

嘗試直接對其進行修改將具有您當前遇到的行為。


查看完整回答
反對 回復 2022-11-03
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

在反應中,您不能直接編輯您的狀態(tài)變量。您必須創(chuàng)建一個新的臨時變量,對其進行編輯然后調用setState()以實現(xiàn)您想要的并觸發(fā)重新渲染。


所以你的handleAddItem變成:


handleAddItem(s) {

  // Create a copy of items

  const newItems = { ...this.state.items }; // Assuming that items is an object

  // Edit the copy

  newItems[s.listName].push({ name: s.newItem });

  // Call setState

  this.setState({ items: newItems });

}


查看完整回答
反對 回復 2022-11-03
?
慕桂英3389331

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

你不應該直接改變狀態(tài)。你應該打電話setState:


https://reactjs.org/docs/state-and-lifecycle.html#do-not-modify-state-directly


handleAddItem(s) {

  this.setState(({ items }) => {

    const updatedItems = {...items};

    updatedItems[s.listName] = [...updatedItems[s.listName], { name: s.newItem }];

    return {

      items: updatedItems

    };

  });

}


查看完整回答
反對 回復 2022-11-03
  • 3 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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