zoukankan      html  css  js  c++  java
  • ReactJS学习笔记(二)

    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方法。
  • 相关阅读:
    日期时间格式
    input表单加disable的后无法获取其value值
    登录判断,清除中间变量
    弹出层嵌套
    转换qq音乐格式为mp3
    layui双击表格,跳转修改页面
    设置输入电话号码为11位
    layui表格设置,分数合计
    解决数据库传回时间类型为数字
    自定义标签
  • 原文地址:https://www.cnblogs.com/zhuyang/p/5012546.html
Copyright © 2011-2022 走看看