TodoList实现增删改查
1、创建TodoList组件
1 import React from 'react'; 2 3 class TodoList extends React.Component{ 4 5 //构造方法 6 constructor(props){ 7 super(props); 8 this.state = { 9 list: [ 10 '1', 11 '2, 12 '3', 13 '4' 14 15 } 16 } 17 18 //按钮点击事件方法 19 handleBtnClick(){ 20 this.setState({ 21 list: [...this.state.list,'hello world'] //...为展开运算符,将this.state.list内容放到当前的list中 22 }); 23 } 24 25 render(){ 26 return ( 27 <div> 28 <div> 29 <input type="text"></input> 30 <button onClick={this.handleBtnClick.bind(this)}>添加</button> 31 </div> 32 <ul> 33 {/* key属性为唯一值,没有该属性,浏览器会报警告信息,在做添加操作时会出bug */} 34 {this.state.list.map((item,index) => <li key={index}>{item}</li>)} 35 </ul> 36 37 </div> 38 ); 39 } 40 } 41 42 export default TodoList;
2、构建删除列表元素
1 import React from 'react'; 2 3 class TodoList extends React.Component{ 4 5 //构造方法 6 constructor(props){ 7 super(props); 8 this.state = { 9 list: [], //展示列表 10 inputValue:'' //记录输入框的值 11 } 12 } 13 14 ////按钮点击事件方法 15 handleBtnClick(){ 16 this.setState({ 17 list: [...this.state.list,this.state.inputValue], //...为展开运算符,将this.state.list内容放到当前的list中 18 inputValue: '' //点击添加按钮,清空输入框 19 }); 20 } 21 22 //输入框输入事件方法 23 handleInputChange(e){ 24 this.setState({ 25 inputValue: e.target.value 26 }); 27 } 28 29 //点击展示列表事件方法,用于删除展示元素 30 handleItemClick(index){ 31 const list = [...this.state.list]; 32 list.splice(index,1 33 this.setState({ 34 list: list 35 }); 36 } 37 38 render(){ 39 return ( 40 <div> 41 <div> 42 <input value={this.state.inputValue} onChange={this.handleInputChange.bind(this)}></input> 43 <button onClick={this.handleBtnClick.bind(this)}>添加</button> 44 </div> 45 <ul> 46 {this.state.list.map((item,index) => { 47 return <li onClick={this.handleItemClick.bind(this,index)} key={index}> 48 {item} 49 </li> 50 })} 51 </ul> 52 53 </div> 54 ); 55 } 56 } 57 58 export default TodoList;
3、整个案例的代码
1 mport React, { Component, Fragment } from 'react'; 2 3 class TodoList extends Component { 4 5 constructor(props) { 6 super(props); 7 this.state = { 8 inputValue: '', 9 list: [] 10 } 11 } 12 13 render() { 14 return ( 15 <Fragment> 16 <div> 17 <input value={this.state.inputValue} 18 onChange={this.handlerInputChange.bind(this)} /> 19 <button onClick={this.handleBtnClick.bind(this)}>提交</button> 20 </div> 21 <ul> 22 { 23 this.state.list.map((item, index) => { 24 return <li key={index} onClick={this.handleItemDelete.bind(this, index)}>{item}</li> 25 }) 26 } 27 </ul> 28 </Fragment> 29 ) 30 } 31 32 handlerInputChange(e) { 33 this.setState({ 34 inputValue: e.target.value 35 }); 36 } 37 38 handleBtnClick() { 39 this.setState({ 40 list: [...this.state.list, this.state.inputValue], 41 inputValue: '' 42 }) 43 } 44 45 handleItemDelete(index) { 46 // console.log(index) 47 // immutable 48 // state不允许我们做任何的改变 49 const list = [...this.state.list] 50 list.splice(index, 1) 51 52 this.setState({ 53 list: list 54 }) 55 } 56 57 } 58 59 export default TodoList;
4、效果图展示


浙公网安备 33010602011771号