1.Ajax: componentDidMount 方法设置 Ajax 请求,等到请求成功,再用 this.setState 方法重新渲染 UI。
/*demo1*/
var Demo1Box=React.createClass({
    getInitialState:function(){
        return{
            username:'',
            lastGistUrl:''
        };
    },
    componentDidMount:function(){
        $.get(this.props.url,function(result){
            var lastGist = result[0];
            if (this.isMounted()) {
                this.setState({
                  username: lastGist.owner.login,
                  lastGistUrl: lastGist.html_url
                });
            }
        }.bind(this));
    },
    render:function(){
        return (
            <div>
                {this.state.username}
                <a href={this.state.lastGistUrl}>here</a>
            </div>
        )
    }
});
ReactDOM.render(
    <Demo1Box url="https://api.github.com/users/octocat/gists" />,
    document.getElementById('demo1')
);
2.利用promise实现ajax(!因为promise是异步的,所以render时要检测)
html:<div id='demo2'></div>
JS:
/*demo2*/
var Demo2Box=React.createClass({
    getInitialState:function(){
        return {data: null};
    },
    componentDidMount:function(){
        this.props.promise.then(
            value => this.setState({ data: value})
          );
 
    },
    render:function(){
        console.log(1);
        console.log(this.state.data);
        console.log(2);
        if(this.state.data){
            console.log(1);
            console.log(this.state.data);
            console.log(2);
            console.log(this.state.data.items);
            var items=this.state.data.items;
            var datalist=items.map(function(items){
                return (
                    <li>
                        {items.html_url},
                        {items.name}
                    </li>
                )
            });
            return (
                <ul>
                    {datalist}
                </ul>
            );
        }
        return (
            <ul>
            </ul>
        );
    }
});
ReactDOM.render(
    <Demo2Box promise={$.getJSON('https://api.github.com/search/repositories?q=javascript&sort=stars')} />,
    document.getElementById('demo2')
);
3.组件间回调函数
html:<div id='demo3'></div>
JS:
var Demo31Box=React.createClass({
    render:function(){
        return(
            <button onClick={this.props.clickCallback}>点我获取全名</button>
        )
    }
});
 
var Demo32Box=React.createClass({
    getFullName:function(){
        alert("全名是lili");
    },
    render:function(){
        return (
            //调用外部组件并传递回调方法
            <Demo31Box clickCallback={this.getFullName} />
        )
    }
});
ReactDOM.render(
    <Demo32Box />,
    document.getElementById('demo3')
);
4.Mixins,将Mixins对象上的方法混合到另一个调用的组件,作用和$.extend方法的作用相似。Mixins对象有几个特点:
1. )在mixin中写的生命周期相关的回调都会被合并,也就是他们都会执行,而不会互相覆盖掉。会先执行 mixin ,最后执行组件的 。
2.)mixin没有render方法。

ReactJS学习笔记(二)的更多相关文章

  1. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  2. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  3. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  4. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  5. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  6. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  7. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  8. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  9. Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

随机推荐

  1. 【OpenGL】 第一篇 OpenGL概览

    ---------------------------------------------------------------------------------------------------- ...

  2. VS中Debug和Realease、及静态库和动态库的区别整理(转)

    原文出自:http://www.cnblogs.com/chensu/p/5632486.html 一.Debug和Realease区别产生的原因 Debug 通常称为调试版本,它包含调试信息,并且不 ...

  3. mysql密码重置

    忘记了Mysql的root用户密码,尝试连接时提示: mysqladmin: connect to server at 'localhost' failed ERROR : Access denied ...

  4. kubernetes多节点部署解析

    注:以下操作均基于centos7系统. 安装ansible ansilbe可以通过yum或者pip安装,由于kubernetes-ansible用到了密码,故而还需要安装sshpass: pip in ...

  5. 将 Shiro 作为应用的权限基础

    Shiro 是 Java 世界中新近出现的权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势.本文介绍了 Shiro 的 ...

  6. MSSQL 多行合并为一行

    select ptl_a01, ptl_piitem, ( ) as ptl_count, STUFF((SELECT ','+ltrim(ptl_pdid) FROM PRODUCT_TRACEAB ...

  7. Node.js文件系统、路径的操作详解

    17173 17173 2 75 2014-12-12T05:06:00Z 2014-12-12T05:06:00Z 21 2735 15595 www.17173.com 129 36 18294 ...

  8. ORA-01747: user.table.column, table.column 或列说明无效

    Oracle.DataAccess.Client.OracleException ORA-01747: user.table.column, table.column 或列说明无效 原因1: 查了一下 ...

  9. mongodb高级查询

    前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦.如果没有安装MongoDB去看我的上一篇博客  MongoDB下载安装与简单增删改查 前奏:启 ...

  10. Atom插件推荐

    1.File Icons 为各种不同的文件显示icon 2.git plus 添加git的功能 3.atom-beauty 代码格式化工具 4.eclipse keybindings 在atom上使用 ...