成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

React中的表單組件

canopus4u / 1257人閱讀

摘要:對(duì)表單元素做了專門的優(yōu)化處理,他對(duì)表單元素做了一些抽象,使得他們的使用方式更統(tǒng)一更規(guī)范。約束性和非約束性組件表單里面出來(lái)了一個(gè)新的概念叫約束性組件。這樣寫出的來(lái)的組件,其值就是用戶輸入的內(nèi)容,完全不管理輸入的過程。約束性組件顯示的是的值。

表單是前端非常重要的一塊內(nèi)容,并且往往包含了錯(cuò)誤校驗(yàn)等邏輯。
React對(duì)表單元素做了專門的優(yōu)化處理,他對(duì)表單元素做了一些抽象,使得他們的使用方式更統(tǒng)一更規(guī)范。

約束性和非約束性組件

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

約束性組件,簡(jiǎn)單的說(shuō),就是由React管理了它的value,而非約束性組件的value就是原生的DOM管理的。
他們的寫法上也有很大區(qū)別。

非約束性組件這么寫:

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

而約束性組件是這么寫的:
//...省略部分代碼
handleChange: function(e) {
  this.setState({name: e.target.value});
}

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

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

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

非約束性組件: 用戶輸入A -> input 中顯示A
約束性組件: 用戶輸入A -> 觸發(fā)onChange事件 -> handleChange 中設(shè)置 state.name = “A” -> 渲染input使他的value變成A
正式因?yàn)檫@樣,強(qiáng)烈推薦使用約束性組件,因?yàn)樗芨玫目刂平M件的生命流程。

更統(tǒng)一和更規(guī)范的接口

React 把 input,textarea 和 select 三個(gè)組件做了抽象和封裝,他們的用法變得非常統(tǒng)一,你基本上可以當(dāng)做同一個(gè)組件來(lái)用。

他們現(xiàn)在有統(tǒng)一的 value 屬性 和 onChange 事件,現(xiàn)在對(duì)于這三種組件你都可以這樣寫