淺談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ù)模型和視圖之間的雙向綁定。
當(dāng)數(shù)據(jù)發(fā)生變化的時候,視圖也就發(fā)生變化,當(dāng)視圖發(fā)生變化的時候,數(shù)據(jù)也會跟著同步變化;可以這樣說用戶在視圖上的修改會自動同步到數(shù)據(jù)模型中去,數(shù)據(jù)模型也是同樣的變化。
雙向數(shù)據(jù)綁定的優(yōu)點:無需和單向數(shù)據(jù)綁定那樣進(jìn)行CRUD(Create,Retrieve,Update,Delete)操作,雙向數(shù)據(jù)綁定最常應(yīng)用在就表單上,這樣當(dāng)用戶在前端頁面完成輸入后,不用任何操作,我們就已經(jīng)拿到了用戶輸入好的數(shù)據(jù),并放到數(shù)據(jù)模型中了。
實現(xiàn)雙向數(shù)據(jù)綁定
但是,在 React中是不存在雙向數(shù)據(jù)綁定的機(jī)制的,需要我們自己對其進(jìn)行實現(xiàn)。
數(shù)據(jù)影響視圖
這種功能實際上,React 已經(jīng)幫助我們實現(xiàn)了,使用 setState({ }) 方法修改數(shù)據(jù)。
(React內(nèi)部提供的修改方法),不允許通過this.state.屬性名 = 數(shù)據(jù) 的方法進(jìn)行數(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 標(biāo)簽來顯示內(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-domV6版本的路由和嵌套路由寫法詳解
本文主要介紹了react-router-domV6版本的路由和嵌套路由寫法詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
在React框架中實現(xiàn)一些AngularJS中ng指令的例子
這篇文章主要介紹了在JavaScript的React框架中實現(xiàn)一些AngularJS指令的例子,React使用Virtual DOM因而與普通的js框架有些不同,需要的朋友可以參考下2016-03-03
基于PixiJS實現(xiàn)react圖標(biāo)旋轉(zhuǎn)動效
PixiJS是一個開源的基于web的渲染系統(tǒng),為游戲、數(shù)據(jù)可視化和其他圖形密集型項目提供了極快的性能,這篇文章主要介紹了用PixiJS實現(xiàn)react圖標(biāo)旋轉(zhuǎn)動效,需要的朋友可以參考下2022-05-05
詳解React Native頂|底部導(dǎo)航使用小技巧
本篇文章主要介紹了詳解React Native頂|底部導(dǎo)航使用小技巧 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
react-router browserHistory刷新頁面404問題解決方法
本篇文章主要介紹了react-router browserHistory刷新頁面404問題解決方法,非常具有實用價值,需要的朋友可以參考下2017-12-12

