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

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

React:通過id更新元素的數據變量

React:通過id更新元素的數據變量

慕慕森 2023-04-14 14:59:44
由于性能問題,為了跑得更快,我想一個一個地刷新一個格子的單元格。我已經成功地能夠通過以下方式更改這些單元格的設計:document.getElementById(`cell-${cell.row}-${cell.col}`).className =      "cell cell-isPlaced";每個單元格都有一個數據變量props.data.num,我想在更改其設計時以相同的方式刷新它。由于某些原因,下面的代碼沒有刷新網格上的數字(為了更容易理解,每個單元格的值為 0,我想將其更改為 1):document.getElementById(`cell-${cell.row}-${cell.col}`).num = 1;細胞:const Cell = (props) => {  let cell = () => {    return (      <div        className={`cell ${getColor(props)}`}        id={`cell-${props.data.row}-${props.data.col}`}      >        {props.data.num}      </div>    );  };  return cell();};export default Cell;元素的數據可以按照我想要的方式更改嗎?(一般情況下,所有單元格都顯示 0 num,這沒有問題)。網格渲染:let grid = this.state.grid.map((row, index) => {      return (        <div key={index} className="row">          {row.map((cell, cellIndex) => {            return (              <Cell                key={cellIndex}                data={cell}              />            );           })}       </div>      );    });初始化期間單元格中的數據: function createGrid(props) {  let grid = [];  for (let i = 0; i < props.rows; i++) {    grid.push([]);    for (let j = 0; j < props.columns; j++) {      grid[i].push({        row: i,        col: j,        num: 0,      });    }  }  return grid;}
查看完整描述

1 回答

?
寶慕林4294392

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

嗯,基本上你的組件不會刷新,因為React不知道它應該重新渲染:

每次組件狀態發生變化時,React 都會安排一次渲染。

因此,子組件僅在使用其中一個函數更改了父組件的狀態時更新。

由于您不通過setState函數或等效功能更改組件的狀態,因此不會觸發重新渲染。

為了解決這個問題,我想你有兩個選擇。要么將 num props 的更新轉換為 setState 函數,要么嘗試暴力方式并this.forceUpdate()為類組件做一個,或者為功能組件做這樣的事情:

const?[update,?setUpdate]?=?useState(0);
const?refresh?=?()?=>?setUpdate(update?+?1);


查看完整回答
反對 回復 2023-04-14
  • 1 回答
  • 0 關注
  • 221 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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