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 无状态的功能 ...
随机推荐
- MHA的在线切换后的一些总结(mha方案来自网络)
mha方案来自:http://www.cnblogs.com/xuanzhi201111/p/4231412.html MHA的在线切换 192.168.2.131 [root bin]$ maste ...
- 如何用70行Java代码实现深度神经网络算法(转)
对于现在流行的深度学习,保持学习精神是必要的——程序员尤其是架构师永远都要对核心技术和关键算法保持关注和敏感,必要时要动手写一写掌握下来,先不用关心什么时候用到——用不用是政治问题,会不会写是技术问题 ...
- jQuery - plugin 代码模型
1.扩展 jQuery 的全局函数,主要以 $.xxx() 的形式调用 (function($) { $.myFunction = function(array) { // code } })(jQu ...
- <Oracle Database>诊断文件
诊断文件 诊断文件是获取有关数据库活动的信息的一种方式,用于解决数据库出现的一些问题,主要包含有关数据库中出现的重要事件的一些信息,这些文件能更好的对数据库进行日常的管 理,主要类型有一下几种: 警告 ...
- 网页的Width ,Height
Jquery中可直接用接口$().height(); 获取浏览器窗口高$(window).height() 获取内部文档高$("body").height() 原生JS 网页可见区 ...
- 编译系统中BNF: Backus-Naur Form
巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首次引入一种形式化符号来描述给定语言的语法. 简称为:BNF符号. 现在,几乎每 ...
- 基本XML解析---编写
#import "ViewController.h" #import "DDXML.h" @interface ViewController () @end @ ...
- 读入一个c程序,并按字母表顺序分组打印变量名,每组前N个字符相同(TCPL 练习6-2)
在建立结构tnode的过程中,我们没有预设门槛.这道题目就设置了门槛,必须根据前N个字符来进行分组,于是排除了长度小于N的变量,以便减轻负担. 因为要求对变量名分组打印,组别理所应当地应该按照至少是升 ...
- 负载均衡的mariadb集群搭建
集群介绍: Galera是一个MySQL(也支持MariaDB,Percona)的同步多主集群软件,目前只支持InnoDB引擎. 主要功能: 同步复制 真正的multi-master,即所有节点可以同 ...
- Restful.Data 开源持久层组件项目最新进展和使用说明
Restful.Data 经过 博客园 和 CSDN 的宣传,目前参与该项目的人数已达到 114 人(群号:338570336),虽大部分并不参与实际开发,但他们所提出的意见和建议以及在试用过程中发现 ...