受控元件與非受控元件

2021-09-11 12:45:46 字數 2323 閱讀 6321

受控元件與非受控元件:是否受狀態控制。

我們來實現乙個react的雙向資料繫結

讓輸入框輸入值,下面的顯示跟著變化

import react, from 'react';

import reactdom from 'react-dom';

class input extends component

}render

()/>

) }

}reactdom.render(, document.queryselector('#root'));

複製**

但是結果和我們想象的不一樣:輸入框不能輸入值。這是因為input的value取的是state中的val。但是val的值一直是空。改變state的唯一方式setstate

import react, from 'react';

import reactdom from 'react-dom';

class input extends component

}handlechange=(e)=>);

} render

() onchange=/>

) }

}reactdom.render(, document.queryselector('#root'));

複製**

簡單功能實現,輸入框值,與顯示值統一。這就是受控元件,受狀態控制。

兩個輸入框實現求和功能,如果使用兩個onchange事件,會造成**的冗餘。我們現在把他們合在一起。

import react, from 'react';

import reactdom from 'react-dom';

class sum extends component

}//key表示的當前狀態改的是哪乙個

//e表示的是事件源

handlechange=(key,e)=>);

} render

() onchange=}/>

type="text" value= onchange=}/>

) }

}reactdom.render(, document.queryselector('#root'));

複製**

這樣就可以通過乙個方法實現兩個onchange事件的功能,不過上面是兩個字串的拼接,需要轉為數字再相加,在這就不做了。

import react, from 'react';

import reactdom from 'react-dom';

//輸入框value值不受狀態控制,不能初始化預設值

class sum extends component

}//通過ref設定的屬性,可以通過this.refs獲取到對應的dom元素

handlechange=()=>);

}render

()

) }

}reactdom.render(, document.queryselector('#root'));

複製**

上面這種實現方式,兩個輸入框不受狀態的控制。通過操作dom獲取到value值,然後進行相加。這就是非受控元件,他與受控元件的區別就是不可以給預設值。

ref的另外一種實現方式(推薦)

import react, from 'react';

import reactdom from 'react-dom';

import errorboundary from './components/errorboundary';

import counter from "./components/counter";

import todos from "./components/todos";

//輸入框value值不受狀態控制,不能初始化預設值

class sum extends component

}//通過ref設定的屬性,可以通過this.refs獲取到對應的dom元素

handlechange=()=>);

}render

()/>

) }

}reactdom.render(, document.queryselector('#root'));

複製**

第二個輸入框中ref給了乙個箭頭函式,x代表真實的dom,把真實dom賦值給當前例項中

受控元件與非受控元件

針對於表單元素而言,如果資料由元件本身進行維護,讓react的state狀態成為唯一資料來源的話,那就是受控元件。非受控元件不需要寫事件處理函式,由dom自身進行維護。一般通過ref進行dom的繫結。受控元件 在html中,表單元素通常自己維護 state,並根據使用者輸入進行更新。而在 react...

受控元件 非受控元件

宣告,本部落格摘自 表單元件像 input textarea 不同於其它的原生元件,因為它們會隨著使用者互動而改變。這些元件提供了介面方便我們管理這些互動。互動屬性 表單元件提供了一些受使用者互動影響的屬性 受控元件 設定了value的input就是乙個受控元件。input裡會一直展現這個值 var...

react受控元件與非受控元件

在html中,標籤input textarea select的值的改變通常是根據使用者輸入進行更新。在react中,可變狀態通常儲存在元件的狀態屬性中,並且只能使用 setstate 更新,而呈現表單的react元件也控制著在後續使用者輸入時該表單中發生的情況,以這種由react控制的輸入表單元素而...