React利用插件和不用插件实现双向绑定的方法详解


Posted in Javascript onJuly 03, 2017

前言

以前对于双向绑定概念来自于Angular.js,现在我用我感兴趣的react.js来实现这样的方式。

有2种方式分析,1:不用插件,2:用插件

(引入react.js操作省略。。。)

不用插件:

先创建react组件

var NoLink = React.createClass({});

React.render(<NoLink />,document.body);

组件创建好了,需要一个初始化变量,来公用显示输入的数据

var NoLink = React.createClass({
 getInitialState:function(){
  return {message:''}
 }
});

React.render(<NoLink />,document.body);

message初始值为空,这是正常项目环境可以这样设置。下面我想用一个input输入框 和一个b标签实现双向绑定的效果,render所需要的html标签

var NoLink = React.createClass({
 getInitialState:function(){
  return {message:''}
 },
 render:function(){
  var mess = this.state.message;
  return (
   <div>
    <input type="text" onChange={this.handelChange} value={mess} />
    <b>{mess}</b>
   </div>
  )
 }
});
React.render(<NoLink />,document.body);

在上面代码中 可以清晰的 看出返回的组件元素,其中在input输入框中加了一个onChange操作,这个处理当我们输入内容的时候,怎么让输入的内容同时展示在b标签中;在react操作中其实很简单。

var NoLink = React.createClass({
 getInitialState:function(){
  return {message:''}
 },
 handelChange:function(event){
  console.log(event.target);
  this.setState({message:event.target.value})
 },
 render:function(){
  var mess = this.state.message;
  return (
   <div>
    <input type="text" onChange={this.handelChange} value={mess} />
    <b>{mess}</b>
   </div>
  )
 }
});

React.render(<NoLink />,document.body);

onChange直接调用handelChange函数,在这只要处理对初始化变量message的重新赋值就可以了,在react中获取初始值 直接用“this.state.初始值",如果想设置初始值直接用"this.setState({初始值:新值}) ",这个点先理清楚了我需要设置初始值,然后呢

我的输入值怎么直接管理到setState中去,当我onChange={this.handelChange}时候就开始应用handelChange函数了在这里通过event.target可以直接获取当前dom元素对象,因为我在这里用input,获取其值的方式".value"就可以了。

我在render的时候定义了mess变量来存放初始化message的值,这个js写法,懂得js性能的人一看就明白了,不多说。看下在浏览器的操作:

React利用插件和不用插件实现双向绑定的方法详解

接下来换种方式:用插件形式

用插件:

react.js给我们提供了linkState函数,但这个函数来自于React.addons.LinkedStateMixin,首先看下源码的操作,先进入React.addons.js中去找LinkedStateMixin

React利用插件和不用插件实现双向绑定的方法详解

这里几个对象就是这个addons.js中提供的所有操作,有重要的react动画插件CSSTransitionGroup包含其中。接下来我们这次需要linkedStateMixin所以走到这个对象中去看看:

React利用插件和不用插件实现双向绑定的方法详解

在这里只提供了linkState函数,直接返回一个ReactLink对象,把参数直接给ReactLink对象去做处理。

主要这个东西怎么用在实例中,先创建一个react组件

var ReactLink = React.createClass({});


React.render(<ReactLink />,document.body);

接下来思考,在这个组件中我们怎么引入外面对象,react.js提供了一个mixins的函数,要是引用对象多了直接以数组形式展现;其源码如图

React利用插件和不用插件实现双向绑定的方法详解

在组件中直接这样使用即可:

var ReactLink = React.createClass({
 //引用公共插件linkedStateMixin
 mixins:[React.addons.LinkedStateMixin]
});


React.render(<ReactLink />,document.body);

linkedStateMixin是拿到了,现在我们要做的是怎么在定义的vdom上使用,在源码中我看到this.props.valueLink  这样的形式,说明在虚拟dom元素中加入valueLink才能使用,

var ReactLink = React.createClass({
 //引用公共插件linkedStateMixin
 mixins:[React.addons.LinkedStateMixin],
 getInitialState:function(){
  return {message:''}
 },
 render:function(){
  return (
    <div>
     <input type="text" valueLink = {this.linkState('message')}/>
     <b>{this.state.message}</b>
    </div>
  )
 }
});


React.render(<ReactLink />,document.body);

上面的写法也是最简洁的写法,直接将初始化变量message传给linkState函数中去,然后react插件源码先获取的虚拟dom中的valueLink属性再进行操作。

用这样形式写好了 试一下效果:

React利用插件和不用插件实现双向绑定的方法详解

完全OK.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Javascript 浮点运算的问题分析与解决方法
Aug 27 Javascript
JavaScript函数定义的常见注意事项小结
Sep 16 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
Jun 30 Javascript
jQuery实现frame之间互通的方法
Jun 26 jQuery
基于jquery实现多级菜单效果
Jul 25 jQuery
vue嵌套路由与404重定向实现方法分析
May 04 Javascript
jQuery事件多次绑定与解绑问题实例分析
Feb 19 jQuery
浅谈ECMAScript 中的Array类型
Jun 10 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
Sep 05 Javascript
redux处理异步action解决方案
Mar 22 Javascript
关于Js中new操作符的作用详解
Feb 21 Javascript
聊聊JS ES6中的解构
Apr 29 Javascript
解决webpack -p压缩打包react报语法错误的方法
Jul 03 #Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
Jul 03 #Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
Jul 03 #Javascript
微信小程序开发中的疑问解答汇总
Jul 03 #Javascript
JavaScript之promise_动力节点Java学院整理
Jul 03 #Javascript
JavaScript之DOM_动力节点Java学院整理
Jul 03 #Javascript
javaScript中封装的各种写法示例(推荐)
Jul 03 #Javascript
You might like
用PHP 快速生成 Flash 动画的方法
2007/03/06 PHP
PHP 登录记住密码实现思路
2013/05/07 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
Zend Framework开发入门经典教程
2016/03/23 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
javascript与CSS复习(二)
2010/06/29 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
js验证框架之RealyEasy验证详解
2016/06/08 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
python实现对一个完整url进行分割的方法
2015/04/29 Python
python读取excel表格生成erlang数据
2017/08/26 Python
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
HTML5印章绘制电子签章图片(中文英文椭圆章、中文英文椭圆印章)
2019/06/03 HTML / CSS
幼儿园教师培训制度
2014/01/16 职场文书
酒店端午节促销方案
2014/02/18 职场文书
物业总经理岗位职责
2014/02/28 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
接收函格式
2015/01/30 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
教师工作证明范本
2015/06/12 职场文书
廉洁自律证明
2015/06/24 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript
基于Python实现股票收益率分析
2022/04/02 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python