zoukankan      html  css  js  c++  java
  • 基于react的简单TODOList

    前段时间看了下react,写个栗子记录

    页面效果如下

    效果:展示代办事件,正文加了删除线的是已经完成的,未加横杠的是未完成的,

    交互:1、在input里面输入新添加的内容,点击Add按钮添加代办事件

       2、点击事件toggle完成状态

       3、切换显示已完成,未完成,全部

    代码如下:

    1、页面基本架子的引入

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>todoList</title>
     6     <script src="react-demos-master/build/react.js"></script>
     7     <script src="react-demos-master/build/react-dom.js"></script>
     8     <script src="react-demos-master/build/browser.min.js"></script>
     9 </head>
    10 <body>
    11     <div id="todoList"></div>
    12 </body>
    13 </html>

    2、一些原有的todo

    1 var items = [
    2       {text:'Sth1',id:1,statue:false},
    3       {text:'Sth2',id:2,statue:true},
    4       {text:'Sth3',id:3,statue:true},
    5       {text:'Sth4',id:4,statue:true}
    6     ]

    3、页面的jsx

      3.1、基本外层元素

      

     1   var id = 10;
     2   var TodoApp = React.createClass({
     3     getInitialState:function(){
     4       return {
     5           items:[]
     6       }
     7     },
     8     componentDidMount:function(){
     9       this.setState({items:items})
    10     },
    11     handleSubmit:function(e){
    12       items.push({
    13         text:this.refs.myTextInput.value,
    14         id:id++,
    15         statue:false
    16       });
    17       this.setState({items:items});
    18       this.refs.myTextInput.value = "";
    19       e.preventDefault();
    20     },
    21     showState:function(type){
    22      var filterItems = [];
    23       if(type == "all"){
    24         filterItems = items
    25       }else{
    26         filterItems=items.filter((v)=>{
    27           return v.statue == eval(type);
    28         })
    29       }
    30       this.setState({items:filterItems})
    31     },
    32     render:function(){
    33         return (
    34           <div>
    35             <TodoList list = {this.state.items}/>
    36             <form onSubmit={this.handleSubmit}>
    37               <input type="text" ref="myTextInput" onChange={this.handleChange}/>
    38               <input type="submit" value="Add" onClick={this.handleSubmit} />
    39             </form>
    40             <Footer showState={this.showState}/>
    41           </div>
    42         )
    43     }
    44   })
    45   ReactDOM.render(<TodoApp items={items} />, todoList);

    在这里主要涉及了,

    (1)state(组件可变属性)和props(组件不可变属性)的使用;

    (2)refs获取真正的DOM节点;

    (3)UI组件颗粒度尽量小,方便重用;

      3.2显示list的jsx

     1  var TodoListItem = React.createClass({    
     2     getInitialState:function(){
     3       return {
     4         statue:this.props.statue
     5       }
     6     },
     7     toggleState:function(){
     8       this.setState({statue:!this.state.statue})
     9     },
    10     render:function(){
    11       if(!this.state.statue){
    12         return (
    13           <li onClick={this.toggleState}>{this.props.text}</li>
    14        )
    15       }else{
    16         return (
    17           <li onClick={this.toggleState}><s>{this.props.text}</s></li>
    18        )
    19       }
    20      
    21     }
    22   });
    23   var TodoList = React.createClass({
    24     render:function(){          
    25         var listItem = this.props.list.map(function(item){
    26            return <TodoListItem key={item.id} text={item.text} statue = {item.statue}></TodoListItem>
    27         })
    28         return (
    29           <ul>
    30             {listItem}
    31           </ul>
    32         )
    33     }
    34   });

      3.3 filter功能部分的jsx

     1   var FilterLink = React.createClass({
     2     render:function(){          
     3         return (
     4           <a href="javascript:void(0)" onClick={this.props.onClick.bind(null,this.props.filter)}>{this.props.text}</a>
     5         )
     6     }
     7   });
     8   var Footer = React.createClass({
     9     render:function(){          
    10         return (
    11           <div>
    12             <p>Filter:</p>
    13             Done:
    14             <FilterLink filter="true" text="Done" onClick={this.props.showState} />;
    15             noDone:
    16             <FilterLink filter="false" text="noDone" onClick={this.props.showState} />;
    17             All:
    18             <FilterLink filter="all" text="All" onClick={this.props.showState} />;
    19           </div>
    20         )
    21     }
    22   });

    例子的全部代码如下

      1 <!DOCTYPE html>
      2 <html>
      3   <head>
      4     <script src="react-demos-master/build/react.js"></script>
      5     <script src="react-demos-master/build/react-dom.js"></script>
      6     <script src="react-demos-master/build/browser.min.js"></script>
      7   </head>
      8   <body>
      9     <div id="todoList"></div>
     10     
     11   <script>
     12     var items = [
     13       {text:'Sth1',id:1,statue:false},
     14       {text:'Sth2',id:2,statue:true},
     15       {text:'Sth3',id:3,statue:true},
     16       {text:'Sth4',id:4,statue:true}
     17     ]
     18   </script>
     19   <script type="text/babel">
     20   var TodoListItem = React.createClass({    
     21     getInitialState:function(){
     22       return {
     23         statue:this.props.statue
     24       }
     25     },
     26     toggleState:function(){
     27       this.setState({statue:!this.state.statue})
     28     },
     29     render:function(){
     30       if(!this.state.statue){
     31         return (
     32           <li onClick={this.toggleState}>{this.props.text}</li>
     33        )
     34       }else{
     35         return (
     36           <li onClick={this.toggleState}><s>{this.props.text}</s></li>
     37        )
     38       }
     39      
     40     }
     41   });
     42   var TodoList = React.createClass({
     43     render:function(){          
     44         var listItem = this.props.list.map(function(item){
     45            return <TodoListItem key={item.id} text={item.text} statue = {item.statue}></TodoListItem>
     46         })
     47         return (
     48           <ul>
     49             {listItem}
     50           </ul>
     51         )
     52     }
     53   });
     54   var FilterLink = React.createClass({
     55     render:function(){          
     56         return (
     57           <a href="javascript:void(0)" onClick={this.props.onClick.bind(null,this.props.filter)}>{this.props.text}</a>
     58         )
     59     }
     60   });
     61   var Footer = React.createClass({
     62     render:function(){          
     63         return (
     64           <div>
     65             <p>Filter:</p>
     66             Done:
     67             <FilterLink filter="true" text="Done" onClick={this.props.showState} />;
     68             noDone:
     69             <FilterLink filter="false" text="noDone" onClick={this.props.showState} />;
     70             All:
     71             <FilterLink filter="all" text="All" onClick={this.props.showState} />;
     72           </div>
     73         )
     74     }
     75   });
     76 
     77   var id = 10;
     78   var TodoApp = React.createClass({
     79     getInitialState:function(){
     80       return {
     81           items:[]
     82       }
     83     },
     84     componentDidMount:function(){
     85       this.setState({items:items})
     86     },
     87     handleSubmit:function(e){
     88       items.push({
     89         text:this.refs.myTextInput.value,
     90         id:id++,
     91         statue:false
     92       });
     93       this.setState({items:items});
     94       this.refs.myTextInput.value = "";
     95       e.preventDefault();
     96     },
     97     showState:function(type){
     98      var filterItems = [];
     99       if(type == "all"){
    100         filterItems = items
    101       }else{
    102         filterItems=items.filter((v)=>{
    103           return v.statue == eval(type);
    104         })
    105       }
    106       this.setState({items:filterItems})
    107     },
    108     render:function(){
    109         return (
    110           <div>
    111             <TodoList list = {this.state.items}/>
    112             <form onSubmit={this.handleSubmit}>
    113               <input type="text" ref="myTextInput" onChange={this.handleChange}/>
    114               <input type="submit" value="Add" onClick={this.handleSubmit} />
    115             </form>
    116             <Footer showState={this.showState}/>
    117           </div>
    118         )
    119     }
    120   })
    121   ReactDOM.render(<TodoApp items={items} />, todoList);
    122   </script>
    123   </body>
    124 </html>
    View Code

    有时间再写个用redux来管理数据的TODOList的例子吧(希望自己别太懒)

  • 相关阅读:
    解密百度图片URL
    实例——百度翻译
    解决爬虫中文乱码问题
    爬虫实例——爬取1元夺宝用户头像(借助谷歌浏览器开发者工具)
    爬虫实例——爬取淘女郎相册(通过selenium、PhantomJS、BeautifulSoup爬取)
    爬虫实例——爬取淘女郎的相册(借助谷歌浏览器的开发者工具找出规律快速爬取)
    爬虫实例——通过JS控制滚动条
    破解wingide编辑器
    java数据库数据导入excel
    视频
  • 原文地址:https://www.cnblogs.com/peace1/p/6902449.html
Copyright © 2011-2022 走看看