react入门系列之todolist代码优化(使用react 新特性,es6语法)

代码优化

1 /**
2 - 今天我们通过es6语法,以及react新特性来优化我们的todo-list
3 - 顺带解决上个版本的key报错问题
4 */

使用es6的解构赋值优化代码

 1 /**
 2 - 当我们需要一个对象某个属性的时候,我们可以使用解构赋值,这样在后续的代码就不需要通过原对象不停调用属性去获取了
 3 - const { index } = this.props -----> 这就是解构赋值,在后续同一作用域使用this.props.index的时候直接使用index就可以了。
 4 - item.js代码修改如下,app.js的代码就不在此展示了,各位自行修改。
 5 */
 6
 7 import React, {Component, Fragment} from ‘react‘;
 8
 9 class Item extends Component {
10     deletItem = () => {
11         const { deletItem, index } = this.props; // 解构赋值
12         deletItem(index);
13     }
14     render(){
15         const { value } = this.props; //解构赋值
16         return(
17             <Fragment>
18                 <div
19                 onClick = {this.deletItem}
20                 >
21                 {value}
22                 </div>
23             </Fragment>
24         )
25     }
26 }
27
28 export default Item

react新特性

 1 /**
 2 - 旧版本的react提供的setState()方法,只能接收一个对象。
 3 - 新版本的react中,setState()还可以接收一个函数,并且该函数有一个默认参数prevState
 4 - prevState表示未修改之前的state,也就是说我们在使用的时候无需再用this.state去获取属性了
 5 - 另外在原先的代码中我们的render函数写得过于长,现将用一个函数将使用map函数的逻辑部分抽出来
 6 - 解决key值报错问题,在引入item组件后使用的时候,给每一个item绑定一个key,目前我们现使用index,
 7 - 后续我们讲解虚拟dom的时候再讲解为何开发中我们不要使用index去给key赋值。
 8 - 现在使用这个特性去优化我们的app.js,代码如下。
 9 */
10 import React, { Component, Fragment }from ‘react‘;
11 import Item from ‘./item.js‘
12
13 class App extends Component {
14   constructor(props){
15     super(props);
16     this.state = {
17       inputValue: ‘‘,// 用来存储 input框中的 value值。
18       list:[] // 用来存储 每一个li的 value值。
19     }
20   }
21   handleInputChange = (e) => {
22     const value = e.target.value;
23     this.setState(() => ({inputValue: value}))//新版的react中的setState()函数可以接收一个函数,箭头函数的函数体使用()包裹可以省略return
24   }
25   addList = () => {
26     this.setState((prevState) => { // 同时setState函数还提供一个prevState参数,这个参数代表未改变之前的this.state
27       const list = [...prevState.list, prevState.inputValue];
28       return {
29         list,
30         inputValue: ‘‘ // 添加完毕以后清空input框
31       }
32     })
33   }
34   deletListItem = (index) => { // 因为在绑定该方法的时候使用了bind函数,所以这里可以不实用箭头函数去保证this的指向
35     this.setState((prevState) => {
36       let list = [...prevState.list];
37       list.splice(index, 1);
38       return {list};
39     })
40   }
41   // 在原先的代码中我们的render函数写得过于长,现将使用map函数的逻辑部分抽出来
42   getItem = () => {
43     return (
44       this.state.list.map((item, index) => {
45         return(
46           <Item
47           key = {index} // 解决key值问题。
48           value = {item}
49           index = {index}
50           deletItem = {this.deletListItem}
51           ></Item>
52         )
53       })
54     )
55   }
56   render(){
57     return (
58       <Fragment>
59       <div>
60         <input
61         onChange = { this.handleInputChange }
62         value = {this.state.inputValue}
63         />
64         <button onClick = { this.addList }>提交</button>
65       </div>
66       <ul>
67         {this.getItem()} {/** 在次调用抽出来的逻辑函数,调用一下即可。*/}
68       </ul>
69       </Fragment>
70     );
71   }
72 }
73 export default App;

后续还有更新...........

原文地址:https://www.cnblogs.com/boye-1990/p/11367495.html

时间: 2024-10-05 04:50:09

react入门系列之todolist代码优化(使用react 新特性,es6语法)的相关文章

【REACT NATIVE 系列教程之九】REACT NATIVE版本升级步骤与注意事项!

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/react-native/2288.html 由于React Native处于快速迭代发展中,因此组件功能的扩展.语法的变更也将会有较大的区别,因此升级版本则属于务必掌握的了. 昨天Himi刚从0.23版本升级到0.26,升级的主要原因有两点: 1. 一些组件在最新版本中加入了很多新的属性,例如0.23版本中Modal动画没有最新的属性: an

ASP.NET 5系列教程 (一):领读新特性

?? 近期微软发布了ASP.NET 5.0,本次发布的新特性需求源于大量用户的反馈和需求,例如灵活的跨平台运行时和自主部署能力使ASP.NET应用不再受限于IIS.Cloud-ready环境配置降低了云端部署的门槛,另外源码开放无疑也是一个重量级惊喜.这些更改会有助于创建易于开发.部署.维护和现代的Web应用程序.相信看到以上几点作为.NET程序员的你已经迫不及待体验ASP.NET 5 的新功能了,下面我们就来看下这些新特性. ASP.NET 5 是用于创建Web应用的框架,相对于以前的版本它更

React入门资源整理

另外,附上我搜集的一些比较实用的学习资料,建议先看这些撸起来,再看什么乱七八糟的awsome系列. React入门资源整理 孔明前端团队React项目新手指南:http://www.07net01.com/2015/09/920779.html

React 深入系列1:React 中的元素、组件、实例和节点

文:徐超,<React进阶之路>作者 授权发布,转载请注明作者及出处 React 深入系列,深入讲解了React中的重点概念.特性和模式等,旨在帮助大家加深对React的理解,以及在项目中更加灵活地使用React. React 中的元素.组件.实例和节点,是React中关系密切的4个概念,也是很容易让React 初学者迷惑的4个概念.现在,老干部就来详细地介绍这4个概念,以及它们之间的联系和区别,满足喜欢咬文嚼字.刨根问底的同学(老干部就是其中一员)的好奇心. 元素 (Element) Rea

React 深入系列5:事件处理

文:徐超,<React进阶之路>作者 授权发布,转载请注明作者及出处 React 深入系列5:事件处理 React 深入系列,深入讲解了React中的重点概念.特性和模式等,旨在帮助大家加深对React的理解,以及在项目中更加灵活地使用React. Web应用中,事件处理是重要的一环,事件处理将用户的操作行为转换为相应的逻辑执行或界面更新.在React中,处理事件响应的方式有多种,本文将详细介绍每一种处理方式的用法.使用场景和优缺点. 使用匿名函数 先上代码: //代码1 class MyCo

30分钟精通React今年最劲爆的新特性——React Hooks

你还在为该使用无状态组件(Function)还是有状态组件(Class)而烦恼吗? --拥有了hooks,你再也不需要写Class了,你的所有组件都将是Function. 你还在为搞不清使用哪个生命周期钩子函数而日夜难眠吗? --拥有了Hooks,生命周期钩子函数可以先丢一边了. 你在还在为组件中的this指向而晕头转向吗? --既然Class都丢掉了,哪里还有this?你的人生第一次不再需要面对this. 这样看来,说React Hooks是今年最劲爆的新特性真的毫不夸张.如果你也对react

前端入门21-JavaScript的ES6新特性

声明 本篇内容全部摘自阮一峰的:ECMAScript 6 入门 阮一峰的这本书,我个人觉得写得挺好的,不管是描述方面,还是例子,都讲得挺通俗易懂,每个新特性基本都还会跟 ES5 旧标准做比较,说明为什么会有这个新特性,这更于理解. 所以,后续不会再写个关于 ES6 系列的文章了,就在这篇里大概的列举一下,大体清楚都有哪些新特性就好了,以后需要用时再去翻一翻阮一峰的书. 正文-ES6新特性 ES6 新标准规范相比于 ES5 旧标准规范中,无非就三个方面的改动:新增.更新.废弃. 由于更新和废弃需要

React系列(一):React入门

React简介 1.由来 React是有Facebook开发出来用于构建前端界面的JS组件库,由于其背后的强大背景,使得这款库在技术开发上完全没有问题. 2.React的优势 解决大规模项目开发中数据不断变化变得难以操作的问题: 组件化开发,使得开发更加快速: 单向数据流,有利于找到问题: 虚拟DOM,在React内部有一套diff算法可以快速的计算出整体需要改动的位置,从而做到快速局部刷新:举个栗子:删除一个列表再插入个新表,计算后会比较出不同然后插进去: JSX的编译方式,将HTML代码和J

React Native 系列(二)

前言 本系列是基于React Native版本号0.44.3写的,最初学习React Native的时候,完全没有接触过React和JS,本文的目的是为了给那些JS和React小白提供一个快速入门,让你们能够在看React Native语法的时候不那么费劲,有过前端开发经验的可以直接忽略. 什么是React React是一个JavaScript框架,用来开发web应用.Web应用开发中,比较流行的有三个框架: react angular vue 从名字上,就能看到react native是基于R