久久久久在线观看_又色又爽又黄的免费视频播放_一区中文字幕_日韩电影在线播放

今日焦點(diǎn) 焦點(diǎn)資訊 營銷之道 企業(yè)報(bào)道 淘寶運(yùn)營 網(wǎng)站建設(shè) 軟件開發(fā) 400電話
  當(dāng)前位置: 首頁 » 資訊 » 軟件開發(fā) » 正文

react受控組件與非受控組件詳解

放大字體  縮小字體 發(fā)布日期:2018-02-11  來源:企業(yè)800網(wǎng)  作者:新格網(wǎng)  瀏覽次數(shù):989  【去百度看看】
核心提示:我們都知道,有許多的web組件可以被用戶的交互發(fā)生改變,比如:<input>,<select>,或者是我現(xiàn)在正在使用的富文本編輯器。這些組件在日常的開發(fā)中很不顯眼,我們可以很輕易的通過輸入一些內(nèi)容或者設(shè)置元素的value屬性來改變組件的值。但是,因?yàn)镽eact是單向數(shù)據(jù)流綁定的,這些組件可能會(huì)變得失控:本文主要和大家介紹了react受控組件與非受控組件,希望能幫助到大家。
我們都知道,有許多的web組件可以被用戶的交互發(fā)生改變,比如:<input>,<select>,或者是我現(xiàn)在正在使用的富文本編輯器。這些組件在日常的開發(fā)中很不顯眼,我們可以很輕易的通過輸入一些內(nèi)容或者設(shè)置元素的value屬性來改變組件的值。但是,因?yàn)镽eact是單向數(shù)據(jù)流綁定的,這些組件可能會(huì)變得失控:本文主要和大家介紹了react受控組件與非受控組件,希望能幫助到大家。

1.一個(gè)維護(hù)它自己state里的value值的<Input>組件無法從外部被修改;

2.一個(gè)通過props來設(shè)置value值的<Input>組件只能通過外部控制來更新。

最近在使用螞蟻金服出品的一條基于react的ant-design UI組件時(shí)遇到一個(gè)問題,編輯頁面時(shí)input輸入框會(huì)展示保存前的數(shù)據(jù),但是是用defaultValue就是不起作用,輸入框始終為空值而不是具體的傳入的值。具體編輯頁面中文本框相關(guān)的代碼如下:


    ... //render方法上面的內(nèi)容省略
 <FormItem
   label="問題描述:"
   hasFeedback
   {...props.formItemLayout}
 >
  <Input type="textarea" defaultValue={props.value}/>
</FormItem>
      //render下面的內(nèi)容省略
      ...

在給代碼段所屬的組件傳遞value props后,文本框中的默認(rèn)值一直為空,因?yàn)樵擁撁嫠诘臓顟B(tài)state中,value所對(duì)應(yīng)的狀態(tài)初始值為空,導(dǎo)致后續(xù)異步請求成功后改變value對(duì)應(yīng)的狀態(tài)中的值,仍然顯示為空。

google一下具體原因,原來React的form表單組件中的defaultValue一經(jīng)傳遞值后,后續(xù)改變defaultValue都將不起作用,被忽略了。

具體來說這是一種react非受控組件,其狀態(tài)是在input的react內(nèi)部控制,不受調(diào)用者控制?梢允褂檬芸亟M件來實(shí)現(xiàn)。

下面就說說這個(gè)受控組件與非受控組件,它們都是基于react的form表單組件元素的,具體也可參考react官網(wǎng)這方面介紹

受控組件

就形式上來說,受控組件就是為某個(gè)form表單組件添加value屬性;非受控組件就是沒有添加value屬性的組件;,受控組件的形式如下形式:


render: function() {
  return <input type="text" value="Hello!" />;
 }

添加了value 屬性的表單組件元素其內(nèi)部是不會(huì)維護(hù)自己狀態(tài)state,組件的value值一旦設(shè)置某個(gè)具體值就始終是這個(gè)值,所以需要調(diào)用者來控制組件value的改變。

這種寫法帶來一個(gè)問題:渲染后的input組件的用戶交互,用戶輸入的任何值將不起作用,input輸入框中的值始終為Hello!。這與HTML中input表現(xiàn)不一致。

為此,為了控制該組件,就需要能能夠控制input組件的值,需要借助其內(nèi)部的狀態(tài)state,即組件內(nèi)部要維護(hù)一個(gè)狀態(tài)state以便配合input組件的onChange和setState方法來完成對(duì)組件的控制;例如對(duì)上面形式可以進(jìn)行封裝一個(gè)inputItem組件,其內(nèi)部維護(hù)一個(gè)state狀態(tài),具體代碼如下:


 export default class InputItem extends React.Component{
  constructor(props){
    super(props);
    this.state = {
      value: ""
    }
  }

  componentWillReceiveProps(nextProps){
    this.setState({
      value: nextProps.value
    })
  }

  _onChange(evt){
    this.setState({
      value: evt.target.value
    })
  }

  render(){
    return (
      <input type="text" 
        value={this.state.value} 
        onChange={this._onChange.bind(this)}/>
    );
  }
}

這樣就可以在外部像下面這樣調(diào)用InputItem組件了:


<InputItem value={this.state.userName} />

這樣就可以控制react的Input組件了,其實(shí)就是需要借助react的有狀態(tài)component來完成,因?yàn)橛袪顟B(tài)component可以內(nèi)部維護(hù)state。

非受控組件

表現(xiàn)形式上,react中沒有添加value屬性的表單組件元素就是非受控組件。表現(xiàn)形式如下:


<input type="text" />

非受控組件在底層實(shí)現(xiàn)時(shí)是在其內(nèi)部維護(hù)了自己的狀態(tài)state;這樣表現(xiàn)出用戶輸入任何值都能反應(yīng)到元素上。

總結(jié)

在使用react component時(shí),都會(huì)遇到受控組件或者非受控組件;在目前,react組件推薦使用stateless component,但是使用該形式來實(shí)現(xiàn)react component時(shí)使用非受控組件到倒是沒有什么大問題,若是需要控制受控元素就會(huì)有出現(xiàn)問題,表現(xiàn)在:

`受控組件`需要主動(dòng)維護(hù)一個(gè)內(nèi)部state狀態(tài)的,而`stateless component`是無需維護(hù)組件的state狀態(tài)的,二者有沖突。
所以,受控元素就不能使用stateless component來創(chuàng)建。

鑒于受控組件與非受控組件的特點(diǎn),二者應(yīng)用的地方也有所不同,主要表現(xiàn)在:

  1. 受控元素,一般用在需要?jiǎng)討B(tài)設(shè)置其初始值的情況;例如某些form表單信息編輯時(shí),input表單元素需要初始顯示服務(wù)器返回的某個(gè)值然后進(jìn)行編輯。

  2. 非受控元素, 一般用于無任何動(dòng)態(tài)初始值信息的情況; 例如form表單創(chuàng)建信息時(shí),input表單元素都沒有初始值,需要用戶輸入的情況

相關(guān)推薦:

詳解React受控組件與非受控組件

以上就是react受控組件與非受控組件詳解的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

 
關(guān)鍵詞: react,組件,受控
長春  短信群發(fā)  吉林省  紅視窗  中國  長春市  玉米  長春網(wǎng)站建設(shè)  網(wǎng)站  振華  設(shè)備  吉林  設(shè)計(jì)  廣州  撲克  聯(lián)合聲明  敘利亞  美國  內(nèi)蒙古  化武  新聞中心  指示  記者會(huì)  長春上門維修電腦  美國白宮  化學(xué)武器  塞內(nèi)加爾  白宮  中國政府  圓桌  小雨  滿洲里  中消協(xié)  敘政府  日本  非洲  經(jīng)濟(jì)  消費(fèi)者  消費(fèi)者權(quán)益  強(qiáng)臺(tái)風(fēng)  北京市  臺(tái)風(fēng)  中非  國家元首  毒品  中非合作論壇  大阪  突擊步槍  海外網(wǎng)  網(wǎng)站建設(shè)  重慶市  步槍  長春上門做系統(tǒng)  俄羅斯  長春上門修電腦  長春電腦上門維修  售前咨詢技巧  中國電影  制造  政治  北斗導(dǎo)航  龍頭企業(yè)  產(chǎn)業(yè)園  中國智能建筑節(jié)  中國芯  黨委書記  黨委  軍民  位置服務(wù)  長春北大青鳥  侯建國,質(zhì)量,中國特色社會(huì)主義  中國移動(dòng)  AJAX  PHP  XML  f-35  特朗普  特朗普,貿(mào)易戰(zhàn),美國  中國軍網(wǎng)  政府  微博  RSS  美國人  銀河  發(fā)言人  今日頭條  發(fā)布會(huì)  州長  運(yùn)載火箭  彈道導(dǎo)彈  一帶一路  塞申斯  長春國貿(mào)  國際  小米  尼克松  中國市場  孫儷  短視頻  小學(xué)生 
 
[ 資訊搜索 ]  [ 加入收藏 ]  [ 告訴好友 ]  [ 打印本文 ]  [ 違規(guī)舉報(bào) ]  [ 關(guān)閉窗口 ]

 
0條 [查看全部]  相關(guān)評(píng)論

 
網(wǎng)站首頁 | 關(guān)于我們 | 聯(lián)系方式 | 使用協(xié)議 | 版權(quán)隱私 | 網(wǎng)站地圖 | 排名推廣 | 廣告服務(wù) | 積分換禮 | 網(wǎng)站留言 | RSS訂閱 | 皖I(lǐng)CP備2021004516號(hào)-14
企業(yè)800網(wǎng) · 提供技術(shù)支持