淺談React雙向數(shù)據(jù)綁定原理
如果已經(jīng)學(xué)過Vue,并且深入了解過Vue的雙向數(shù)據(jù)綁定的話,就會明白 Vue 2.0 雙向數(shù)據(jù)綁定的核心其實是通過Object.defineProperty來實現(xiàn)數(shù)據(jù)劫持和監(jiān)聽。
在 Vue 3.0 中則通過 Proxy來實現(xiàn)對整體對象的監(jiān)聽,對 Vue2.0 的優(yōu)化。
什么是雙向數(shù)據(jù)綁定
數(shù)據(jù)模型和視圖之間的雙向綁定。
當數(shù)據(jù)發(fā)生變化的時候,視圖也就發(fā)生變化,當視圖發(fā)生變化的時候,數(shù)據(jù)也會跟著同步變化;可以這樣說用戶在視圖上的修改會自動同步到數(shù)據(jù)模型中去,數(shù)據(jù)模型也是同樣的變化。
雙向數(shù)據(jù)綁定的優(yōu)點:無需和單向數(shù)據(jù)綁定那樣進行CRUD(Create,Retrieve,Update,Delete)操作,雙向數(shù)據(jù)綁定最常應(yīng)用在就表單上,這樣當用戶在前端頁面完成輸入后,不用任何操作,我們就已經(jīng)拿到了用戶輸入好的數(shù)據(jù),并放到數(shù)據(jù)模型中了。
實現(xiàn)雙向數(shù)據(jù)綁定
但是,在 React中是不存在雙向數(shù)據(jù)綁定的機制的,需要我們自己對其進行實現(xiàn)。
數(shù)據(jù)影響視圖
這種功能實際上,React 已經(jīng)幫助我們實現(xiàn)了,使用 setState({ }) 方法修改數(shù)據(jù)。
(React內(nèi)部提供的修改方法),不允許通過this.state.屬性名 = 數(shù)據(jù) 的方法進行數(shù)據(jù)修改。
代碼
import React, { Component } from 'react';
// 引入 antd UI庫
import { Button } from 'antd';
class Home extends Component {
constructor(props) {
super(props);
this.state = {
inputVal:'',
};
}
setValue=()=>{
this.setState({
inputVal:"修改 Value"
})
}
render() {
return (
<div className="home" >
Home組件
<p> {this.state.inputVal}</p>
{/* 使用了 antd UI庫 */}
<Button type="primary" onClick={this.setValue}>修改數(shù)據(jù)</Button>
</div>
);
}
}
export default Home;
效果
視圖影響數(shù)據(jù)
通過 React 提供的 onChage 監(jiān)聽事件 實現(xiàn)數(shù)據(jù)的動態(tài)錄入
同時,使用 value 或者 defaultValue 在 input 框中呈現(xiàn)內(nèi)容
為了方便顯示,這里使用了 p 標簽來顯示內(nèi)容
代碼
import React, { Component } from 'react';
import { Button } from 'antd'; // antd UI庫
class Home extends Component {
constructor(props) {
super(props);
this.state = {
inputVal:'',
};
}
change = (ev)=>{
this.setState({
inputVal:ev.target.value
})
}
render() {
return (
<div className="home" >
Home組件
<input
onChange={this.change}
// value={this.state.inputVal}
defaultValue={this.state.inputVal}
placeholder="輸入文本內(nèi)容"
/>
<p> {this.state.inputVal}</p>
</div>
);
}
}
export default Home;
效果
注意:
使用 value 綁定時,value 和 defaultValue 只能使用一個,否則會報警告
到此這篇關(guān)于淺談React雙向數(shù)據(jù)綁定原理的文章就介紹到這了,更多相關(guān)React雙向綁定內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
react router 4.0以上的路由應(yīng)用詳解
本篇文章主要介紹了react router 4.0以上的路由應(yīng)用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
React?Hooks之useDeferredValue鉤子用法示例詳解
useDeferredValue鉤子的主要目的是在React的并發(fā)模式中提供更流暢的用戶體驗,特別是在有高優(yōu)先級和低優(yōu)先級更新的情況下,本文主要講解一些常見的使用場景及其示例2023-09-09
react axios配置代理(proxy),如何解決本地開發(fā)時的跨域問題
這篇文章主要介紹了react axios配置代理(proxy),如何解決本地開發(fā)時的跨域問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
react最流行的生態(tài)替代antdpro搭建輕量級后臺管理
這篇文章主要為大家介紹了react最流行的生態(tài)替代antdpro搭建輕量級后臺管理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08

