最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

react頁(yè)面中存在多個(gè)input時(shí)巧妙設(shè)置value屬性方式

 更新時(shí)間:2023年05月11日 10:57:15   作者:晨晨快跑  
這篇文章主要介紹了react頁(yè)面中存在多個(gè)input時(shí)巧妙設(shè)置value屬性方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

react頁(yè)面中存在多個(gè)input時(shí)巧妙設(shè)置value屬性

筆者以前是一直在用jquery進(jìn)行開(kāi)發(fā)的,才轉(zhuǎn)react沒(méi)多長(zhǎng)時(shí)間,對(duì)別的倒是沒(méi)什么感觸,就是這個(gè)input輸入框是深深的抵觸,感覺(jué)很煩人,簡(jiǎn)單的一個(gè)輸入框,你就必須要設(shè)置changeValue的方法去給input加上,這樣你輸入的內(nèi)容才能夠正確的展示到UI頁(yè)面中,也因此,如果你頁(yè)面中存在多個(gè)input時(shí),簡(jiǎn)直就是噩夢(mèng)了

因?yàn)槟闶紫纫獮檫@些所有的input框綁定上onChange的方法,然后還需要在this.state中去設(shè)置不同的input對(duì)應(yīng)不同的值,最后還需要在changeValue的方法中去一一監(jiān)聽(tīng)input輸入時(shí)去修改對(duì)應(yīng)的input的值,很是麻煩,筆者之前在寫(xiě)一個(gè)注冊(cè)流程的時(shí)候被折磨的苦不堪言,最近閑下來(lái)可以去優(yōu)化一下以前的代碼,找到了一個(gè)可以?xún)?yōu)化一下changeValue的方法

以前筆者的寫(xiě)法是這樣的:

render部分name的名字是和state中的一一對(duì)應(yīng)的。

此處輸入框部分是可以單獨(dú)提取成一個(gè)獨(dú)立的小組件的,這樣就不需要每寫(xiě)一個(gè)input框就需要綁定一次方法,這樣也更符合react官方推薦的做法,不過(guò)因?yàn)檫@里不是本文介紹的重點(diǎn),就沒(méi)有修改了,著重展示一下修改changeValue的方法,現(xiàn)在是根據(jù)input的name名稱(chēng)去一一判斷究竟是哪個(gè)input,然后將input對(duì)應(yīng)的value值進(jìn)行修改,但是這樣最大的一個(gè)問(wèn)題就是當(dāng)頁(yè)面中input多的時(shí)候你的changValue方法會(huì)非常的繁瑣,秉承著所有用到switch方法的地方都能優(yōu)化的原則

筆者做了一下優(yōu)化,將changeValue方法改寫(xiě)為:

是的,僅僅改成了三行,而且你無(wú)論有多少個(gè)input,這個(gè)方法是永遠(yuǎn)不需要去做改變的,唯一需要做到的規(guī)范就是state中的屬性名要于input中的name名稱(chēng)加以對(duì)應(yīng),其實(shí)這算是對(duì)象的屬性賦值的另一種寫(xiě)法,因?yàn)樵趯?duì)象中Key無(wú)法以變量的方式去讀取,所以筆者只好將對(duì)象單提出來(lái)賦值給變量o

更簡(jiǎn)單的方式:

_changeValue(e){
    this.setState({
        [e.target.name] : e.target.value
    })
}

react中input框設(shè)置value報(bào)錯(cuò)解析

react input 不設(shè)置onChange的常見(jiàn)錯(cuò)誤截圖

表單是前端非常重要的一塊內(nèi)容,并且往往包含了錯(cuò)誤校驗(yàn)等邏輯。  

React對(duì)表單元素做了專(zhuān)門(mén)的優(yōu)化處理,他對(duì)表單元素做了一些抽象,使得他們的使用方式更統(tǒng)一更規(guī)范。

約束性和非約束性組件

表單里面出來(lái)了一個(gè)新的概念叫“約束性組件”。那么如何理解約束性組件和非約束性組件呢。

約束性組件,簡(jiǎn)單的說(shuō),就是由react管理了它的value,而非約束性組件的value就是原生的DOM管理的。

他們的寫(xiě)法上也有很大區(qū)別。

非約束性組件這么寫(xiě):

<input type="text" defaultValue="a" />

這個(gè)defaultValue其實(shí)就是原生DOM中的value屬性。這樣寫(xiě)出的來(lái)的組件,其value值就是用戶(hù)輸入的內(nèi)容,React完全不管理輸入的過(guò)程。

而約束性組件是這么寫(xiě)的:

<input type="text" value={this.state.name} onChange={this.handleChange} />
//...省略部分代碼
handleChange: function(e) {
  this.setState({name: e.target.value});
}

這里,value屬性不再是一個(gè)寫(xiě)死的值,他是this.state.name,而this.state.name是由this.handleChange負(fù)責(zé)管理的。

這個(gè)時(shí)候?qū)嶋H上 input 的 value 根本不是用戶(hù)輸入的內(nèi)容。而是onChange 事件觸發(fā)之后,由于 this.setState 導(dǎo)致了一次重新渲染。不過(guò)React會(huì)優(yōu)化這個(gè)渲染過(guò)程,實(shí)際它依然是通過(guò)設(shè)置input的value來(lái)實(shí)現(xiàn)的。

但是一定要注意,約束性組件顯示的值和用戶(hù)輸入的值雖然很多時(shí)候是相同的,但他們根本是兩碼事。約束性組件顯示的是this.state.name的值。你可以在handleChange中對(duì)用戶(hù)輸入的值做任意的處理,比如你可以做錯(cuò)誤校驗(yàn)。

對(duì)比約束性組件和非約束性組件的輸入流程:

非約束性組件: 用戶(hù)輸入A -> input 中顯示A

約束性組件: 用戶(hù)輸入A -> 觸發(fā)onChange事件 -> handleChange 中設(shè)置 state.name = “A” -> 渲染input使他的value變成A

正式因?yàn)檫@樣,強(qiáng)烈推薦使用約束性組件,因?yàn)樗芨玫目刂平M件的生命流程。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • react 實(shí)現(xiàn)圖片正在加載中 加載完成 加載失敗三個(gè)階段的原理解析

    react 實(shí)現(xiàn)圖片正在加載中 加載完成 加載失敗三個(gè)階段的原理解析

    這篇文章主要介紹了react 實(shí)現(xiàn)圖片正在加載中 加載完成 加載失敗三個(gè)階段的,通過(guò)使用loading的圖片來(lái)占位,具體原理解析及實(shí)現(xiàn)代碼跟隨小編一起通過(guò)本文學(xué)習(xí)吧
    2021-05-05
  • 在React中編寫(xiě)樣式的六種方式

    在React中編寫(xiě)樣式的六種方式

    在React中,編寫(xiě)樣式主要有以下幾種方式,內(nèi)聯(lián)樣式,外部樣式表,CSS Modules,Styled Components,Emotion和Radium這六種樣式,下面我將針對(duì)上面提到的6種方式給出詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-01-01
  • React反向代理及樣式獨(dú)立詳解

    React反向代理及樣式獨(dú)立詳解

    這篇文章主要介紹了React反向代理及樣式獨(dú)立詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • react源碼層深入刨析babel解析jsx實(shí)現(xiàn)

    react源碼層深入刨析babel解析jsx實(shí)現(xiàn)

    同作為MVVM框架,React相比于Vue來(lái)講,上手更需要JavaScript功底深厚一些,本系列將閱讀React相關(guān)源碼,從jsx -> VDom -> RDOM等一些列的過(guò)程,將會(huì)在本系列中一一講解
    2022-10-10
  • React Native實(shí)現(xiàn)進(jìn)度條彈框的示例代碼

    React Native實(shí)現(xiàn)進(jìn)度條彈框的示例代碼

    本篇文章主要介紹了React Native實(shí)現(xiàn)進(jìn)度條彈框的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • React實(shí)現(xiàn)組件全屏化的操作方法

    React實(shí)現(xiàn)組件全屏化的操作方法

    開(kāi)發(fā)今天給我提了一個(gè)sql編輯器輸入框比較小,不支持放大,不太方便,下面看下我的處理方法,本文基于React+antd,給大家演示一個(gè)完整的全屏demo,感興趣的朋友一起看看吧
    2021-10-10
  • React Router V5:使用HOC組件實(shí)現(xiàn)路由攔截功能

    React Router V5:使用HOC組件實(shí)現(xiàn)路由攔截功能

    這篇文章主要介紹了React Router V5:使用HOC組件實(shí)現(xiàn)路由攔截功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • React狀態(tài)管理器Rematch的使用詳解

    React狀態(tài)管理器Rematch的使用詳解

    rematch是對(duì)redux的二次封裝,簡(jiǎn)化了redux是使用,極大的提高了開(kāi)發(fā)體驗(yàn),這篇文章主要介紹了React狀態(tài)管理器Rematch的使用,需要的朋友可以參考下
    2022-09-09
  • 基于react hooks,zarm組件庫(kù)配置開(kāi)發(fā)h5表單頁(yè)面的實(shí)例代碼

    基于react hooks,zarm組件庫(kù)配置開(kāi)發(fā)h5表單頁(yè)面的實(shí)例代碼

    這篇文章主要介紹了基于react hooks,zarm組件庫(kù)配置開(kāi)發(fā)h5表單頁(yè)面,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • react在安卓中輸入框被手機(jī)鍵盤(pán)遮擋問(wèn)題的解決方法

    react在安卓中輸入框被手機(jī)鍵盤(pán)遮擋問(wèn)題的解決方法

    這篇文章主要給大家介紹了關(guān)于react在安卓中輸入框被手機(jī)鍵盤(pán)遮擋問(wèn)題的解決方法,文中通過(guò)圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2018-09-09

最新評(píng)論

朝阳市| 镇安县| 皮山县| 银川市| 兰考县| 名山县| 绥江县| 天水市| 崇礼县| 昌平区| 鞍山市| 望都县| 东源县| 罗田县| 贵阳市| 江陵县| 永安市| 塘沽区| 朝阳区| 白银市| 平阴县| 平遥县| 巴楚县| 通辽市| 安多县| 哈尔滨市| 和林格尔县| 上饶县| 富锦市| 和田县| 安新县| 政和县| 麻江县| 广平县| 兴安县| 宜昌市| 安顺市| 宁南县| 阜新| 胶州市| 宝清县|