React(一)基础点
prop实例
<div id="app"></div> <script src="bower_components/react/react.min.js"></script> <script src="bower_components/react/react-dom.min.js"></script> <script src="lib/babel-core/browser.min.js"></script> <script type="text/babel"> var MessageBox = React.createClass({ getInitialState: function () { return { isVisible: true, titleMessage: '你好世界(来自state哦)', subMessages: [ '我会代码搬砖', '以及花式搬砖', '不说了,工头叫我回去搬砖了。。。。。' ] } }, render: function () { return ( <div> <h1>{this.state.titleMessage}</h1> <SubMessage messages={this.state.subMessages} /> </div> ) } }); var SubMessage = React.createClass({ propTypes: { messages: React.PropTypes.array.isRequired }, getDefaultProps: function () { return { messages: ['默认的子消息'] // 防止this.props.messages不存在 } }, render: function () { var msgs = []; this.props.messages.forEach(function (msg, index) { msgs.push( <p>码农说:{msg}</p> ); }); return ( <div>{msgs}</div> ) } }); var messageBox = ReactDOM.render( <MessageBox/>, document.getElementById('app') ); </script>
表单监听事件(非常麻烦,下一段代码有替代的)
<div id="app"></div> <script src="bower_components/react/react.min.js"></script> <script src="bower_components/react/react-dom.min.js"></script> <script src="lib/babel-core/browser.min.js"></script> <script type="text/babel"> var FormApp = React.createClass({ getInitialState: function () { return { inputValue: 'input value', selectValue: 'A', radioValue: 'B', textareaValue: 'some text here' } }, // 监听表单值的改变 handleInput: function (e) { this.setState({ inputValue: e.target.value }); }, handleSelect: function (e) { this.setState({ selectValue: e.target.value }); }, handleSubmit: function (e) { e.preventDefault(); console.log('form submit'); console.log(e); }, render: function () { return ( <div> <form action="" onSubmit={this.handleSubmit}> <input type="text" value={this.state.inputValue} onChange={this.handleInput}/> <select name="" id="" value={this.state.selectValue} onChange={this.handleSelect}> <option value="A">A</option> <option value="B">B</option> <option value="C">C</option> <option value="D">D</option> <option value="E">E</option> </select> <br/> <p>radio button!</p> <input type="radio" name="goodRadio" value="A"/> <input type="radio" name="goodRadio" defaultChecked value="B"/> <input type="radio" name="goodRadio" value="C"/> <br/> <input type="checkbox" name="goodRadio" value="A"/> <input type="checkbox" name="goodRadio" value="B"/> <input type="checkbox" name="goodRadio" defaultChecked value="C"/> <br/> <textarea name="" id="" cols="30" rows="10" value={this.state.textareaValue}> </textarea> <button type="submit">提交</button> </form> </div> ) } }); var messageBox = ReactDOM.render( <FormApp/>, document.getElementById('app') ); </script>
指向ref
var FormApp = React.createClass({ getInitialState: function () { return { inputValue: 'input value', selectValue: 'A', radioValue: 'B', checkboxValues: ['C'], textareaValue: 'some text here' } }, handleSubmit: function (e) { e.preventDefault(); console.log('form submit'); var formData = { input: this.refs.myInput.value, select: this.refs.mySelect.value, textarea: this.refs.myTextarea.value, radio: this.state.radioValue, check: this.state.checkboxValues }; console.log('the form result is: '); console.log(formData); }, handleRadio: function (e) { this.setState({ radioValue: e.target.value }); }, handleCheck: function (e) { var checkboxValues = this.state.checkboxValues.slice(); var newVal = e.target.value; var index = checkboxValues.indexOf(newVal); if(index == -1) { checkboxValues.push(newVal); } else { // 存在了删除掉 checkboxValues.splice(index, 1); } this.setState({ checkboxValues: checkboxValues }); }, render: function () { return ( <div> <form action="" onSubmit={this.handleSubmit}> <input ref="myInput" type="text" defaultValue={this.state.inputValue}/> 选项: <select name="" id="" defaultValue={this.state.selectValue} ref="mySelect"> <option value="A">A</option> <option value="B">B</option> <option value="C">C</option> <option value="D">D</option> <option value="E">E</option> </select> <br/> <p>radio button!</p> <RadioButtons handleRadio={this.handleRadio} /> <br/> <CheckboxButtons handleCheck={this.handleCheck} /> <br/> <textarea name="" id="" cols="30" rows="10" defaultValue={this.state.textareaValue} ref="myTextarea"> </textarea> <button type="submit">提交</button> </form> </div> ) } }); var RadioButtons = React.createClass({ render: function () { return ( <div> A <input onChange={this.props.handleRadio} type="radio" name="goodRadio" value="A"/> B <input onChange={this.props.handleRadio} type="radio" name="goodRadio" defaultChecked value="B"/> C <input onChange={this.props.handleRadio} type="radio" name="goodRadio" value="C"/> </div> ); } }); var CheckboxButtons = React.createClass({ render: function () { return ( <div> A <input onChange={this.props.handleCheck} type="checkbox" name="A" value="A"/> B <input onChange={this.props.handleCheck} type="checkbox" name="B" value="B"/> C <input onChange={this.props.handleCheck} type="checkbox" name="C" defaultChecked value="C"/> </div> ) } }); var messageBox = ReactDOM.render( <FormApp/>, document.getElementById('app') );
React(一)基础点的更多相关文章
- react组件的生命周期
写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...
- 十分钟介绍mobx与react
原文地址:https://mobxjs.github.io/mobx/getting-started.html 写在前面:本人英语水平有限,主要是写给自己看的,若有哪位同学看到了有问题的地方,请为我指 ...
- RxJS + Redux + React = Amazing!(译一)
今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...
- React 入门教程
React 起源于Facebook内部项目,是一个用来构建用户界面的 javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组件内 ...
- 通往全栈工程师的捷径 —— react
腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...
- 2017-1-5 天气雨 React 学习笔记
官方example 中basic-click-counter <script type="text/babel"> var Counter = React.create ...
- RxJS + Redux + React = Amazing!(译二)
今天,我将Youtube上的<RxJS + Redux + React = Amazing!>的后半部分翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: ht ...
- React在开发中的常用结构以及功能详解
一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...
- React的使用与JSX的转换
前置技能:Chrome浏览器 一.拿糖:React的使用 React v0.14 RC 发布,主要更新项目: 两个包: React 和 React DOM DOM node refs 无状态的功能 ...
随机推荐
- XAF ObjectSpace保存时添加记录
点击保存按钮时自动添加相关记录(用于界面查看),另外还有Audit控件可使用,此处只是一个简单的功能. 新建一个VC并关联到相关的View,代码如下: public partial class Gon ...
- 使用 AForge.NET 做视频采集
AForge.NET 是基于C#设计的,在计算机视觉和人工智能方向拥有很强大功能的框架.btw... it's an open source framework. 附上官网地址: http://www ...
- ViewPager及PagerTabStrip 的使用详解
ViewPager 就是一个滑屏效果的一个控件,使用比较简单.使用过程思路流程基本如下: 在需要添加的ViewPager的布局文件中添加ViewPager控件--->准备好滑屏所有的View-- ...
- 『TCP/IP详解——卷一:协议』读书笔记——10
2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...
- Windows 10开机的秘密在哪里
如何查看开机速度 查看开机速度,一定要安装所谓的第三方安全软件么?老子就是不喜欢被安全! Windows自带的事件查看器中记录了系统的一举一动,何必需要别人来监视? 在运行(WinKey+R)中输入e ...
- 快速排序-java
排序-快速排序 基本思想: 将数据划分为两部分,左边的所有元素都小于右边的所有元素:然后,对左右两边进行快速排序. 划分方法: 选定一个参考点(中间元素),所有元素与之相比较,小的放左边,大的放右边. ...
- java-代理模式及动态代理
代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在考虑到性能或安全等因素的情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. ...
- 【图像处理】第三次实验:JPEG图像压缩
1.任务说明 将LENA图像用JPEG方式压缩. 2.算法原理 JPEG(Joint Photographic Experts Group)是一个由ISO和IEC两个组织机构联合组成的一个专家组,负责 ...
- 'sessionFactory' or 'hibernateTemplate' is required解决方法
这种情况就是在通过spring配置hibernate4的时候(注意,这里是hibernate4不是hibernate3,hibernate3的),使用的是HibernateDaoSupport的这种方 ...
- 如何编译MongoDB?
本文将在Linux环境下编译Mongodb. 您可以选择已经编译好的版本直接使用,也可以尝试自己编译.https://www.mongodb.org/downloads#production 官方 ...