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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

反應(yīng)狀態(tài)更新不正確

反應(yīng)狀態(tài)更新不正確

汪汪一只貓 2021-12-12 15:34:25
預(yù)期:我正在嘗試訪問變量中的狀態(tài)數(shù)據(jù)并操作該變量。我將再次將處理的日期設(shè)置為 setstate。問題:當(dāng)我將一個(gè)狀態(tài)分配給一個(gè)變量時(shí),它不是僅僅復(fù)制狀態(tài)中的數(shù)據(jù),而是成為狀態(tài)本身的副本,因此當(dāng)我操縱數(shù)據(jù)時(shí),狀態(tài)本身就是變化。注意:在下面的代碼中,tmpData.splice是我更改tmpData變量時(shí)狀態(tài)發(fā)生變化的地方。onRowAdd: newData => new Promise(resolve => {    setTimeout(() => {        {        const { data } = this.state;        const tmpData = data;        const tmpRowData = this.getRowData(this.state.valorenVal ? this.state.valorenVal : newData.nr ? newData.nr : '');        if (tmpRowData.length >= 1) {            if (newData.number && tmpRowData[0].nr) {                tmpRowData[0].number = newData.number ? newData.number : '';                tmpData.splice(tmpData.length, 0, tmpRowData[0]);                this.setState({ data: tmpData }, () => resolve());                this.setState({ valorenVal: '' });            } else {                this.setState({ data }, () => resolve());            }        } else {            this.setState({ data }, () => resolve());        }        }        resolve();    }, 1000);}),我是 React 的新手,這可能是一個(gè)愚蠢的問題,但您的回答將幫助我更好地理解 React。
查看完整描述

3 回答

?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊

在 React 中,您需要避免直接狀態(tài)突變,因?yàn)樗鼤?huì)阻止 React 準(zhǔn)確跟蹤發(fā)生的更改。假設(shè)data是一個(gè)數(shù)組,您可以像這樣創(chuàng)建它的副本:

const tmpData = [...data];

或者

const tmpData = Array.from(data);

并根據(jù)需要編輯它,而不會(huì)在更新狀態(tài)之前導(dǎo)致不需要的突變 setState


查看完整回答
反對(duì) 回復(fù) 2021-12-12
?
SMILET

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

tmpData是 的淺拷貝data。由于引用 fromtmpDatadata通過淺拷貝維護(hù)的,這就是為什么您仍在 mutating data。

請(qǐng)嘗試以下操作:

const tmpData = data.slice()

這將創(chuàng)建一個(gè)新數(shù)組,該數(shù)組應(yīng)該中斷對(duì)原始數(shù)組的引用,從而允許您按照自己的意愿創(chuàng)建data. 希望能幫助到你


查看完整回答
反對(duì) 回復(fù) 2021-12-12
?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

React 使用淺比較來(lái)檢查當(dāng)前 props 和 nextProps 對(duì)象以及當(dāng)前 state 和 nextState 對(duì)象是否相等。這意味著如果狀態(tài)中的所有鍵都具有相同的值,React 將永遠(yuǎn)不會(huì)重新渲染組件。


在您的代碼tmpData中等于data,它們都是同一個(gè)對(duì)象的索引。


function shallowEqual(state, nextState) {

    if ( state === nextState) {

        return true; 

    }


    return Object.keys(state).every(key => state[key] === nextState[key]);

}


查看完整回答
反對(duì) 回復(fù) 2021-12-12
  • 3 回答
  • 0 關(guān)注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)