之前写页面上的input比较少,所以没有单提出来一个组件,今天研究了下input组件,但共用一个onChange的问题卡了一会儿,查了下发现几个比较好的方法,分享下:

方法一

Input组件

let Input = React.createClass({

    getInitialState: function() {

        return { }
}, render: function() {
return (
<div className="inputwrapper">
<input type="text" placeholder={this.props.placeholder} onChange={this.props.valueChange.bind(null,this.props.name)}/>
</div> );
}
})

使用Input组件

let FormAdd = React.createClass({

    getInitialState: function() {

        return {  }
}, submit:function(){ console.log(this.state); }, valueChange:function(name,e){ console.log(name+e.target.value);
this.setState({[name]: e.target.value})
}, render: function() { return ( <div className="all">
<Input placeholder="请输入你的姓名" name="name" valueChange={this.valueChange}></Input>
<Input placeholder="请输入你的手机号" name="phone" valueChange={this.valueChange}> </Input>
<Input placeholder="请输入你的微信号" name="wechat" valueChange={this.valueChange}></Input>
<Input placeholder="请输入你的QQ号" name="qq" valueChange={this.valueChange}></Input>
<div className="rebtn" onClick={this.submit}></div>
</div> </div> );
}
})

方法二

Input组件

let Input = React.createClass({

     getInitialState: function() {

        return { }
}, render: function() { return (
<div className="inputwrapper">
<input type="text" placeholder={this.props.placeholder} name={this.props.name} onChange={this.props.valueChange}/>
</div> );
}
})

使用Input组件

let FormAdd = React.createClass({

    getInitialState: function() {

        return {  }
}, submit:function(){ console.log(this.state); }, valueChange:function(name,e){ this.setState({[e.target.name]: e.target.value}); /*下面这种方式也可以
var change = {};
change[e.target.name] = e.target.value;
this.setState(change);
*/
}, render: function() { return ( <div className="all">
<Input placeholder="请输入你的姓名" name="name" valueChange={this.valueChange}></Input>
<Input placeholder="请输入你的手机号" name="phone" valueChange={this.valueChange}> </Input>
<Input placeholder="请输入你的微信号" name="wechat" valueChange={this.valueChange}></Input>
<Input placeholder="请输入你的QQ号" name="qq" valueChange={this.valueChange}></Input>
<div className="rebtn" onClick={this.submit}></div>
</div> );
}
})

注:setState({xxx:xxx}) 第一个参数默认会被认为是字符串,因为动态传递的是一个变量 要用[]中括号包裹

参考:React.js: Identifying different inputs with one onChange handler

React编写input组件传参共用onChange的更多相关文章

  1. 从 Vue 的视角学 React(四)—— 组件传参

    组件化开发的时候,参数传递是非常关键的环节 哪些参数放在组件内部管理,哪些参数由父组件传入,哪些状态需要反馈给父组件,都需要在设计组件的时候想清楚 但实现这些交互的基础,是明白组件之间参数传递的方式, ...

  2. React(7) --react父子组件传参

    react父子组件传参 父级向子级传参:在父组件中,我们引入子组件,通过给子组件添加属性,来起到传参的作用,子组件可以通过props获取父组件传过来的参数. 在父组件中: import React f ...

  3. vue 父子组件传参

    父向子组件传参 例子:App.vue为父,引入componetA组件之后,则可以在template中使用标签(注意驼峰写法要改成componet-a写法,因为html对大小写不敏感,component ...

  4. vue子组件传参给父组件

    关于父组件传参给子组件,可以看我另一篇文章 教程开始: 我们要实现的效果是:在子组件的Input框输入,父组件中实时更新显示.(也就是把子组件中的数据传给父组件) 一.子组件代码 template部分 ...

  5. vue-父子组件传参以及无限级评论

    vue父子组件的使用 <template> <div> <zi :data="data" /> </div> </templa ...

  6. Vue 子组件向父组件传参

    直接上代码 <body> <div id="counter-event-example"> <p>{{ total }}</p> & ...

  7. Vue(小案例_vue+axios仿手机app)_公共组件(路由组件传参)

    一.前言                    1.公共轮播图的实现                    2.组件传参,公共组件的实现 二.主要内容 1.公共轮播图的实现 (1)分析:当渲染不同的轮 ...

  8. Vue-admin工作整理(四):路由组件传参

    路由组件传参:如果在一个页面中,需要根据路由去获得参数,去对页面进行一些逻辑处理,首先可以通过this.$router来获取路由实例的参数,这样页面组件和路由就进行了耦合,为了进行分离,更大程度复用, ...

  9. VueJs(11)---vue-router(命名路由,命名视图,重定向别名,路由组件传参)

    vue-router 上篇文章讲了第一篇vue-router相关文章,文章地址:VueJs(10)---vue-router(进阶1) 一.命名路由 有时候,通过一个名称来标识一个路由显得更方便一些, ...

随机推荐

  1. VMware虚拟机下Ubuntu连不上网解决

    虚拟机:VMware® Workstation 12 Pro Ubuntu: 14.04 问题描述:电脑从公司拿到家打开Ubuntu之后,打开自带Firefox浏览器,显示连接不上网,终端下ping ...

  2. synchronized优化

    重量级锁 synchronized关键字 前文解释了synchronized的实现和运用,了解monitor的作用,但是由于monitor监视器锁的操作是基于操作系统的底层Mutex Lock实现的, ...

  3. javascript王国的一次旅行,一个没有类的世界怎么玩转面向对象?

    1. 前言 作为Java 帝国的未来继承人,Java小王子受到了严格的教育, 不但精通Java语言.Java虚拟机.java类库和框架,还对各种官方的Java规范了如指掌. 近日他听说一个叫做Java ...

  4. 基于脚本的modelsim自动化仿真笔记

    这里记录一下基于脚本的modelsim自动化仿真的一些知识和模板,以后忘记了可以到这里查找.转载请标明出处:http://www.cnblogs.com/IClearner/ . 一.基本介绍 这里介 ...

  5. centos中安装mysql

    一.首先输入指令 rpm -qa|grep mysql 检查操作系统中是否已经安装了MySQL 可以通过 yum list | grep mysql 命令来查看yum上提供的mysql数据库可下载的版 ...

  6. IntelliJ idea学习资源

    工作需要, 最近得从Eclipse转战到Idea, 找了些不错的学习资料: 1, 从eclipse上迁移过来的用户说明: https://www.jetbrains.com/help/idea/201 ...

  7. 暑假OI规划

    为了准备11月的NOIP(最好能到550+)暑假要认真的刷题: 1.NOIP的原题 2.USACO历年的GOLD 3.CF的比赛 4.刷几本书 5.带着做bzoj(lydsy) 6.少玩游戏

  8. CSDN社区投诉申请表

    最近两天我发现我的个人网站,业余草:www.xttblog.com,流量急速下滑.经过分析,发现是被CSDN社区的一个博客网友将我网站上的内容搬到了他的CSDN博客上.导致了已搜索就全部导流到了CSD ...

  9. [Usaco2007 Open]Fliptile 翻格子游戏 状态压缩

    考试想到了状压,苦于T1废掉太长时间,于是默默输出impossible.. 我们知道,一个格子的翻转受其翻转次数和它相邻翻转次数的影响. 由每一个位置操作两次相当于把它翻过来又翻回去,所以答案中每一个 ...

  10. HTML <div>和<span>

    块代码 <div>和<span> 1.. <style> .ccwTest { font-family: '.PingFang SC';">; co ...