淺談React雙向數(shù)據綁定原理
如果已經學過Vue
,并且深入了解過Vue
的雙向數(shù)據綁定的話,就會明白 Vue 2.0
雙向數(shù)據綁定的核心其實是通過Object.defineProperty
來實現(xiàn)數(shù)據劫持和監(jiān)聽。
在 Vue 3.0
中則通過 Proxy
來實現(xiàn)對整體對象的監(jiān)聽,對 Vue2.0
的優(yōu)化。
什么是雙向數(shù)據綁定
數(shù)據模型和視圖之間的雙向綁定。
當數(shù)據發(fā)生變化的時候,視圖也就發(fā)生變化,當視圖發(fā)生變化的時候,數(shù)據也會跟著同步變化;可以這樣說用戶在視圖上的修改會自動同步到數(shù)據模型中去,數(shù)據模型也是同樣的變化。
雙向數(shù)據綁定的優(yōu)點:無需和單向數(shù)據綁定那樣進行CRUD(Create,Retrieve,Update,Delete)操作,雙向數(shù)據綁定最常應用在就表單上,這樣當用戶在前端頁面完成輸入后,不用任何操作,我們就已經拿到了用戶輸入好的數(shù)據,并放到數(shù)據模型中了。
實現(xiàn)雙向數(shù)據綁定
但是,在 React
中是不存在雙向數(shù)據綁定的機制的,需要我們自己對其進行實現(xiàn)。
數(shù)據影響視圖
這種功能實際上,React
已經幫助我們實現(xiàn)了,使用 setState({ })
方法修改數(shù)據。
(React
內部提供的修改方法),不允許通過this.state.屬性名 = 數(shù)據
的方法進行數(shù)據修改。
代碼
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ù)據</Button> </div> ); } } export default Home;
效果
視圖影響數(shù)據
通過 React
提供的 onChage 監(jiān)聽事件
實現(xiàn)數(shù)據的動態(tài)錄入
同時,使用 value
或者 defaultValue
在 input
框中呈現(xiàn)內容
為了方便顯示,這里使用了 p
標簽來顯示內容
代碼
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="輸入文本內容" /> <p> {this.state.inputVal}</p> </div> ); } } export default Home;
效果
注意:
使用 value
綁定時,value
和 defaultValue
只能使用一個,否則會報警告
到此這篇關于淺談React雙向數(shù)據綁定原理的文章就介紹到這了,更多相關React雙向綁定內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
react-router-domV6版本的路由和嵌套路由寫法詳解
本文主要介紹了react-router-domV6版本的路由和嵌套路由寫法詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03在React框架中實現(xiàn)一些AngularJS中ng指令的例子
這篇文章主要介紹了在JavaScript的React框架中實現(xiàn)一些AngularJS指令的例子,React使用Virtual DOM因而與普通的js框架有些不同,需要的朋友可以參考下2016-03-03react-router browserHistory刷新頁面404問題解決方法
本篇文章主要介紹了react-router browserHistory刷新頁面404問題解決方法,非常具有實用價值,需要的朋友可以參考下2017-12-12