ReactJS_14 表單的可控組件和不可控組件

可控組件和不可控組件:

在React中的input標(biāo)簽是有些小坑的,input本身就有自己的緩存機(jī)制露乏,然后React的State也有緩存機(jī)制碧浊。這兩種緩存機(jī)制我們?cè)诰幋a中是要進(jìn)行取舍的。將input中的value綁定到state的React組件就是可控組件瘟仿,反之則是不可控組件箱锐。

可控組件:

render()函數(shù)中設(shè)置了value的值是一個(gè)功能受限的組件,渲染出來(lái)的HTML元素始終保持value屬性的值劳较,即使用戶輸入也不會(huì)改變驹止。

class MyForm extends React.Component{
        render(){
            return(
                <div>
                    <input type="text" value="React教程"}/>
                </div>
            )
        }
    }

這時(shí)候你在瀏覽器中打開(kāi)的React教程這個(gè)值是不可變的,甚至連刪除都刪除不了观蜗,這是由React的渲染策略決定的臊恋。如果要寫(xiě)成功能正常和可用性組件,我們需要編寫(xiě)onChange事件嫂便,并將value綁定到state中捞镰。

 class MyForm extends React.Component{
        constructor(props){
            super(props);
            this.state={value:'React教程'}
        };
        handleChange(event){
            this.setState({
                value:event.target.value
            });
            console.log(this.state.value);
        }
        render(){
            return(
                <div>
                    <input type="text" value={this.state.value} onChange={this.handleChange.bind(this)}/>
                </div>
            )
        }
    }
    ReactDOM.render(
        <MyForm />,
        document.getElementById('root')
    );

在情況允許的條件下闸与,我們應(yīng)該優(yōu)先考慮編寫(xiě)可控組件毙替。

可控組件的有點(diǎn):

  • 符合React單向數(shù)據(jù)流特性,即從state流向render輸出的結(jié)果践樱。
  • 數(shù)據(jù)存儲(chǔ)在state中厂画,便于訪問(wèn)和處理。

不可控組件

在input標(biāo)簽中不把value綁定到state上的就是不可控組件拷邢,它的數(shù)據(jù)不與state對(duì)應(yīng)袱院,所以在開(kāi)發(fā)時(shí)會(huì)給自己挖很多坑,但是不可控組件并不是不可掌控,下面我們了解一下不可控組件的小技巧忽洛。
我們先來(lái)做一個(gè)最簡(jiǎn)單的不可用組件腻惠。

class MyForm extends React.Component{
        render(){
            return(
                <div>
                    <input type="text"/>
                </div>
            )
        }
    }

組件完成之后給它加上一個(gè)onChange事件,發(fā)現(xiàn)是可以監(jiān)控到變化值的欲虚。如果要獲得iput中的value值集灌,需先拿到其DOM節(jié)點(diǎn),然后獲取其value值复哆。

  class MyForm extends React.Component{
        handleChange(){
            const inputValue=ReactDOM.findDOMNode(this.refs.React).value;
            console.log(inputValue);
        }

        render(){
            return(
                <div>
                    <input type="text" onChange={this.handleChange.bind(this)} ref="React"/>
                </div>
            )
        }
    };

上面的方法太過(guò)于繁瑣欣喧,而且不可復(fù)用,所以我們還是采取給input加入默認(rèn)值的方式梯找,但是不是value了唆阿,而是defaultValue

class MyForm extends React.Component{
        render(){
            return(
                <div>
                    <input type="text" defaultValue="默認(rèn)值"/>
                </div>
            )
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锈锤,一起剝皮案震驚了整個(gè)濱河市驯鳖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌久免,老刑警劉巖臼隔,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異妄壶,居然都是意外死亡摔握,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)丁寄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)氨淌,“玉大人,你說(shuō)我怎么就攤上這事伊磺∈⒄” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵屑埋,是天一觀的道長(zhǎng)豪筝。 經(jīng)常有香客問(wèn)我,道長(zhǎng)摘能,這世上最難降的妖魔是什么续崖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮团搞,結(jié)果婚禮上严望,老公的妹妹穿的比我還像新娘。我一直安慰自己逻恐,他們只是感情好像吻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布峻黍。 她就那樣靜靜地躺著,像睡著了一般拨匆。 火紅的嫁衣襯著肌膚如雪姆涩。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天惭每,我揣著相機(jī)與錄音阵面,去河邊找鬼。 笑死洪鸭,一個(gè)胖子當(dāng)著我的面吹牛样刷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播览爵,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼置鼻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蜓竹?” 一聲冷哼從身側(cè)響起箕母,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俱济,沒(méi)想到半個(gè)月后嘶是,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛛碌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年聂喇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔚携。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡希太,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出酝蜒,到底是詐尸還是另有隱情誊辉,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布亡脑,位于F島的核電站堕澄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏霉咨。R本人自食惡果不足惜蛙紫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望躯护。 院中可真熱鬧惊来,春花似錦、人聲如沸棺滞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)继准。三九已至枉证,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間移必,已是汗流浹背室谚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留崔泵,地道東北人秒赤。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像憎瘸,于是被迫代替她去往敵國(guó)和親入篮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理幌甘,服務(wù)發(fā)現(xiàn)潮售,斷路器,智...
    卡卡羅2017閱讀 134,662評(píng)論 18 139
  • 本筆記基于React官方文檔锅风,當(dāng)前React版本號(hào)為15.4.0酥诽。 1. 安裝 1.1 嘗試 開(kāi)始之前可以先去co...
    Awey閱讀 7,709評(píng)論 14 128
  • 原教程內(nèi)容詳見(jiàn)精益 React 學(xué)習(xí)指南,這只是我在學(xué)習(xí)過(guò)程中的一些閱讀筆記皱埠,個(gè)人覺(jué)得該教程講解深入淺出肮帐,比目前大...
    leonaxiong閱讀 2,839評(píng)論 1 18
  • GUIDS 第一章 為什么使用React? React 一個(gè)提供了用戶接口的JavaScript庫(kù)边器。 誕生于Fac...
    jplyue閱讀 3,538評(píng)論 1 11
  • 從心理學(xué)的角度去理解“自信”其實(shí)是一個(gè)非常糟糕的視角饰抒,因?yàn)椤白孕拧笔且粋€(gè)客觀存在的問(wèn)題肮砾,心理學(xué)只能“解釋”自信的表...
    風(fēng)墟閱讀 1,130評(píng)論 3 21