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

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

如何更新Reaction中的嵌套狀態(tài)屬性

如何更新Reaction中的嵌套狀態(tài)屬性

慕的地10843 2019-06-26 15:54:55
如何更新Reaction中的嵌套狀態(tài)屬性我試圖使用這樣的嵌套屬性來組織我的狀態(tài):this.state = {    someProperty: {       flag:true    }}但是像這樣更新狀態(tài),this.setState({ someProperty.flag: false });不管用。如何才能正確地做到這一點(diǎn)?
查看完整描述

3 回答

?
慕婉清6462132

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

為了setState對于嵌套對象,您可以遵循以下方法,因?yàn)槲艺J(rèn)為setState不處理嵌套更新。

var?someProperty?=?{...this.state.someProperty}someProperty.flag?=?true;this.setState({someProperty})

其思想是創(chuàng)建一個(gè)虛擬對象,對其執(zhí)行操作,然后用更新的對象替換組件的狀態(tài)

現(xiàn)在,擴(kuò)展操作符只創(chuàng)建對象的一個(gè)級別嵌套副本。如果您的狀態(tài)是高度嵌套的,例如:

this.state?=?{
???someProperty:?{
??????someOtherProperty:?{
??????????anotherProperty:?{
?????????????flag:?true
??????????}
??????????..
??????}
??????...
???}
???...}

您可以在每個(gè)級別上使用擴(kuò)展運(yùn)算符設(shè)置State,如

this.setState(prevState?=>?({
????...prevState,
????someProperty:?{
????????...prevState.someProperty,
????????someOtherProperty:?{
????????????...prevState.someProperty.someOtherProperty,?
????????????anotherProperty:?{
???????????????...prevState.someProperty.someOtherProperty.anotherProperty,
???????????????flag:?false
????????????}
????????}
????}}))

然而,隨著狀態(tài)越來越嵌套,上面的語法變得每況愈下,因此我建議您使用immutability-helper包來更新狀態(tài)。



查看完整回答
反對 回復(fù) 2019-06-26
?
湖上湖

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

把它寫成一行

this.setState({ someProperty: { ...this.state.someProperty, flag: false} });


查看完整回答
反對 回復(fù) 2019-06-26
?
UYOU

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

有時(shí)直接回答并不是最好的:)

簡短版本:

這段代碼

this.state = {
    someProperty: {
        flag: true
    }}

應(yīng)該簡化為

this.state = {
    somePropertyFlag: true}

長版:

目前您不應(yīng)該希望在Reaction中使用嵌套狀態(tài)..因?yàn)镽eaction不適合與嵌套狀態(tài)一起工作,所以這里提出的所有解決方案都像黑客一樣。他們不使用框架,而是與之斗爭。他們建議為分組某些屬性的可疑目的編寫不那么清晰的代碼。因此,它們作為對挑戰(zhàn)的回答非常有趣,但實(shí)際上是無用的。

讓我們想象一下以下狀態(tài):

{
    parent: {
        child1: 'value 1',
        child2: 'value 2',
        ...
        child100: 'value 100'
    }}

如果只更改child1?Reaction不會重新呈現(xiàn)視圖,因?yàn)樗褂玫氖菧\比較,它會發(fā)現(xiàn)parent財(cái)產(chǎn)沒有改變。順便說一句,直接改變狀態(tài)對象通常被認(rèn)為是一種糟糕的做法。

所以你需要重新創(chuàng)造整個(gè)parent對象。但在這種情況下,我們將遇到另一個(gè)問題。Reaction會認(rèn)為所有的孩子都改變了他們的價(jià)值觀,并且會重新呈現(xiàn)他們所有的價(jià)值觀。當(dāng)然,這對性能不好。

仍然有可能通過編寫一些復(fù)雜的邏輯來解決這個(gè)問題。shouldComponentUpdate()但我想在這里停止使用簡單的解決方案,從簡短的版本。


查看完整回答
反對 回復(fù) 2019-06-26
  • 3 回答
  • 0 關(guān)注
  • 726 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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