4-useState with Object

Time: 20200126

在前面的例子中,用的是數(shù)值型的變量,現(xiàn)在使用對(duì)象型變量。

import React, {useState} from 'react'

function HookCounterThree() {
    const [name, setName] = useState({firstName: '', lastName: ''})
    return (
        <div>
            name: {name.firstName}, {name.lastName}
            <br />
            <button onClick={() => {setName({firstName: "BING", lastName: "W"})}}>修改名字</button>
        </div>
    )
}

export default HookCounterThree

寫(xiě)個(gè)再?gòu)?fù)雜點(diǎn)的例子:

import React, {useState} from 'react'

function HookCounterThree() {
    const [name, setName] = useState({firstName: '', lastName: ''})
    return (
        <div>
            {/*用于獲取輸入數(shù)據(jù) */}
            <form>
                <input type="text" 
                       value={name.firstName} 
                       onChange={e => { setName({firstName: e.target.value})}}
                />
                <input type="text"
                    value={name.lastName}
                    onChange={e => { setName({ lastName: e.target.value })}}
                />
            </form>
            <h2>名:{name.firstName}</h2>
            <h2>姓:{name.lastName}</h2>
        </div>
    )
}

export default HookCounterThree

這種寫(xiě)法能夠?qū)崟r(shí)顯示更新,但是存在一個(gè)問(wèn)題是,后者會(huì)覆蓋前面的內(nèi)容。

進(jìn)入到第一個(gè)輸入框,第二個(gè)輸入框也會(huì)清空。

應(yīng)該是setName時(shí),數(shù)據(jù)沒(méi)有按照匹配更新,導(dǎo)致另一個(gè)參數(shù)為空。

問(wèn)題的原因:useState不會(huì)自動(dòng)merge變化。

這和setState有一些不同。

所以我們用...操作符即可解決。

這個(gè)和reducer這里,傳遞action數(shù)據(jù)包效果是一樣的,也需要對(duì)當(dāng)前狀態(tài)展開(kāi),然后再按照新的數(shù)據(jù)包修改。

如下:

<form>
  <input type="text" 
                 value={name.firstName} 
                 onChange={e => { setName({...name, firstName: e.target.value})}}
  />
  <input type="text"
         value={name.lastName}
         onChange={e => { setName({...name, lastName: e.target.value })}}
  />
</form>

這就是展開(kāi)操作符的妙用。

END.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Hooks是 React v16.8 的新特性,可以在不使用類(lèi)組件的情況下,使用 state 以及其他的React...
    hellomyshadow閱讀 13,652評(píng)論 0 5
  • Hook 是 React 16.8 的新增特性。它可以讓你在不編寫(xiě) class 的情況下使用 state 以及其他...
    孤獨(dú)的小色狼閱讀 391評(píng)論 0 0
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,696評(píng)論 0 5
  • 一、CMS管理系統(tǒng)功能 CMS是ContentManagementSystem的縮寫(xiě),意為"內(nèi)容管理系統(tǒng)"。 CM...
    默默先生Alec閱讀 5,595評(píng)論 0 7
  • 先上一個(gè)大概的效果圖吧。這是我自己電腦桌面和開(kāi)始界面。 制作這樣一個(gè)界面大概花費(fèi)了一整天的時(shí)間,主要時(shí)間是花費(fèi)在移...
    小白砸閱讀 1,624評(píng)論 0 0

友情鏈接更多精彩內(nèi)容