我們知道表單元素與其他的普通dom元素來說是不一樣的,它們儲存了自己的一些狀態。我們主要說的就是表單元素中的受控元件和非受控元件。
受控元件就是這個元件的狀態是我們(react)控制的,這個元件的行為是完全受到我們控制的,所以叫做受控元件,比如:
1class
nameform extends react.component ;56
this.handlechange = this.handlechange.bind(this);7
this.handlesubmit = this.handlesubmit.bind(this);8
}910 handlechange(event
) );12}
1314 handlesubmit(event
) 18
19render()
30 }
這個表單中的input
的value
是受到元件的state
來控制的,並且元素的onchange
也是受到元件的控制函式控制的,並且最終表單的提交也是收到元件的提交處理函式控制的。也就是說,元件任何狀態的改變,都是收到乙個相關的處理函式控制的。那麼我們想想這種受控元件有什麼優點和缺點,我們稍微想一下就是受控元件的話,優點就是一切都是可以控制的,缺點很明顯,就是寫起來比較麻煩,不過這也不算是缺點吧,畢竟要功能強大,肯定就需要自己定製呀。
非受控元件
在大多數情況下,我們推薦使用 受控元件 來實現表單。 在受控元件中,表單資料由 react 元件處理。如果讓表單資料由 dom 處理時,替代方案為使用非受控元件。這句話大概說明了什麼是非受控元件。我們看乙個例子:
1class
nameform extends react.component
67 handlesubmit(event
) 11
12render()
23 }
我們可以跟上面的受控元件做乙個下比較,首先直觀上看,我們的**量少了一點,那麼具體**少了呢,就是我們不需要對input
的onchange
事件進行函式處理,我們也沒有儲存input
的value
的state
,所以這個元件的狀態是由它自己儲存的,我們可以在需要的時候通過ref
獲取到,比如在submit的時候。有時候我們需要給元件加上預設值,受控元件很容易做到,就是給state初始化的時候給乙個預設值,但是非受控元件怎麼弄呢?這裡有乙個屬性叫做defaultvalue
我們給input傳入這個屬性就可以修改它的初始值了。(checkbox 和 radio 是defaultchecked
)
那麼我們到底該如何選擇使用受控元件還是非受控元件呢?
我也不是特別明確,看了一些別人寫的文章,我的理解是:當我們需要實時的控制項的狀態(包括樣式,值等),我們就應該使用受控元件,如果我們只是需要在提交的時候獲取一下值什麼的,我們可以選擇使用非受控元件。
還有乙個特殊的東西,就是,這種元件只能是非受控元件,因為它的value屬性是唯讀的,只能夠受使用者控制,我們沒法主動去控制。
React 之受控元件和非受控元件
在react中,所謂受控元件和非受控元件,是針對表單而言的。表單受控元件class control extends react.component e為原生的事件繫結物件 handlechange e render 使用者名稱 username type text value onchange 密碼...
React 受控元件和非受控元件 1 1
需求 使用者名稱自動獲取 onchange使用者狀態發生改變 就獲取值 就是時時獲取值 使用onchange 點選按鈕 獲取密碼 只要繫結了點選事件 就可以獲取值 通過 let usercont event.target.value 獲取使用者的值 ref獲取值的另外一種用法 密碼 this.myr...
react受控元件與非受控元件
在html中,標籤input textarea select的值的改變通常是根據使用者輸入進行更新。在react中,可變狀態通常儲存在元件的狀態屬性中,並且只能使用 setstate 更新,而呈現表單的react元件也控制著在後續使用者輸入時該表單中發生的情況,以這種由react控制的輸入表單元素而...