受控元件與非受控元件:是否受狀態控制。
我們來實現乙個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控制的輸入表單元素而...