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方法。
相關文章
相關標籤/搜索