1. //demo13
    2. var Input = React.createClass({
    3. getInitialState: function(){
    4. return {loading: true, error: null, data: null,value: 'javascript'};
    5. },
    6. componentDidMount: function(){
    7. var val = this.state.value;
    8. var url = 'https://api.github.com/search/repositories?q='+ val +'&sort=stars';
    9. $.get(url, function(result){
    10. if(this.isMounted()){
    11. this.setState(
    12. {loading: false, data: result, error: null, value: val}
    13. );
    14. }
    15. }.bind(this));
    16. },
    17. handleClick: function(){
    18. var val = this.state.value;
    19. var url = 'https://api.github.com/search/repositories?q='+ val +'&sort=stars';
    20. try {
    21. $.get(url, function(result,status){
    22. this.setState(
    23. {loading: false, data: result, error: null}
    24. );
    25. }.bind(this));
    26. }catch(err){
    27. this.setState(
    28. {loading: false, data: null, error: err}
    29. );
    30. }
    31. },
    32. handleChange: function(event){
    33. var val = event.target.value;
    34. this.setState({value: val});
    35. },
    36. render: function(){
    37. var val = this.state.value;
    38. if(this.state.loading){
    39. return <span>Loading...</span>;
    40. }else if(this.state.error !== null){
    41. return <span>Error: {this.state.error.message}</span>;
    42. }else{
    43. var repos = this.state.data.items;
    44. var repoList = repos.map(function(repo, index){
    45. return (
    46. <li key={index}>
    47. <a href={repo.html_url}>{repo.name}</a>
    48. ({repo.stargazers_count} stars)<br/>
    49. {repo.description}
    50. </li>
    51. );
    52. });
    53. return (
    54. <main>
    55. <div>
    56. this is React.createClass <hr/>
    57. 01\getInitialState 初始化状态 <hr/>
    58. 02\compcomponentDidMount 加载完成 <hr/>
    59. 03\handleClick 点击 <hr/>
    60. 04\handleChange 改变 <hr/>
    61. 05\render 渲染 <hr/>
    62. <input type="text" value={val} onChange={this.handleChange} />
    63. <p onClick={this.handleClick}>you selach {val} this. Click to toggle.</p>
    64. </div>
    65. <h1>Most popular {val} projects in github</h1>
    66. <ol>{repoList}</ol>
    67. </main>
    68. );
    69. }
    70. }
    71. });
    72. ReactDOM.render(
    73. <Input />,
    74. document.getElementById('example')
    75. );
    76. //效果 input 输入动态展示要搜索的值,然后点击文本,搜索结果在下面展示30条