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(一)基础点的更多相关文章

  1. react组件的生命周期

    写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...

  2. 十分钟介绍mobx与react

    原文地址:https://mobxjs.github.io/mobx/getting-started.html 写在前面:本人英语水平有限,主要是写给自己看的,若有哪位同学看到了有问题的地方,请为我指 ...

  3. RxJS + Redux + React = Amazing!(译一)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...

  4. React 入门教程

    React 起源于Facebook内部项目,是一个用来构建用户界面的 javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组件内 ...

  5. 通往全栈工程师的捷径 —— react

    腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...

  6. 2017-1-5 天气雨 React 学习笔记

    官方example 中basic-click-counter <script type="text/babel"> var Counter = React.create ...

  7. RxJS + Redux + React = Amazing!(译二)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>的后半部分翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: ht ...

  8. React在开发中的常用结构以及功能详解

    一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...

  9. React的使用与JSX的转换

    前置技能:Chrome浏览器   一.拿糖:React的使用 React v0.14 RC 发布,主要更新项目: 两个包: React 和 React DOM DOM node refs 无状态的功能 ...

随机推荐

  1. Freemarker常用指令使用范例

    我的開發環境 框架:           springmvc+freemarker 開發工具:    springsource-tool-suite-2.9.0 JDK版本:    1.6.0_29 ...

  2. svn 版本库的创建和配置

    1.创建SVN版本库 mkdir trunk svnadmin create /root/trunk/svntest #这里是路径和即将创建的版本库名称 2.配置svn cd /root/trunk/ ...

  3. ExecutorService中submit和execute的区别(转)

    在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过Executor来启动线程比用Thread的start()更好.在新特征中 ...

  4. debian下使用gitosis+gitweb搭建SSH认证的git服务器

    搭建完成Git服务器后,需要使用两台机器进行测试,一台机器作为服务器端server,一台服务器作为客户端client.整个系统,需要三个计算机账户,这里假设server端的账户名为git,client ...

  5. 使用Xcode6创建EmptyProject

    多年不写文章,今天突然准备好好写一些博客,以记录自己在编程这条道路上的成长,与所学所悟.提起笔来,才发现,自己的语言之匮乏,思虑再三,始觉不顺.也罢,从头开始慢慢训练吧. 自Xcode6更新之后,默认 ...

  6. Software Testing Lab1

    Junit和Hamcrest的安装需要先把两个jar文件下载到本地,具体取得方式多种多样,我是直接从同学那要的.新建一个java项目,在新建时直接在库中导入这两个包即可. 这次编程内容是一个测试三角形 ...

  7. DECLARE_GLOBAL_DATA_PTR宏定义问题

    最近闲着顺便看了看6410的uboot代码,因为友善的boot对nand部分代码做了隐藏,所以干脆找了光盘里面三星原厂的uboot代码来看,因为友善的boot代码肯定也是基于厂商的代码改的,肯定可以的 ...

  8. Await, and UI, and deadlocks! Oh my!

    It’s been awesome seeing the level of interest developers have had for the Async CTP and how much us ...

  9. hdu 5945 Fxx and game

    青年理论计算机科学家Fxx给的学生设计了一款数字游戏. 一开始你将会得到一个数X,每次游戏将给定两个参数x,k,t, 任意时刻你可以对你的数执行下面两个步骤之一: .X=X−i(<=i<= ...

  10. JavaScript对异常的处理

    JavaScript提供了一套异常处理机制.当查出事故时,你的程序应该抛出一个异常: var add=function(a,b){ if(typeof a !== 'number' || typeof ...