当前位置: 首页 > news >正文

react性能优化

react是由facebook公司推出的,主打的口号就是高性能。那么我们在使用的时候,如果能在做一下优化的,那么react使用的性能会更高,用户体验也会更好。

下面我就列出几种优化的方案供大家参考一下

1.  setState的优化

16.0更新以后,setSate书写的时候,可以直接穿一个带两个参数的函数,使得我们在重新修改state中值不用再定义变量来接收,直接和原来的值比较就可以了

this.setState((prev) => ({
    list: [...prev.list, prev.inputValue],
    inputValue: ''
}))

2.props的值

props接收的值使用es6解构的方式来接收

const { list,name  } = this.props

3. ajax请求的位置

定义的事件修改this指向的时候,不建议写在jsx中,而是写到 constructor里面

constructor(props) {
        super(props)
        this.handleClick = this.handleClick.bind(this)
 }
  render() {
        const { item } = this.props
        return (
            <div>
                <div onClick={this.handleClick}>{item}</div>
            </div>
        )
    }

4.如果组件里面没有逻辑处理的话,只是显示一些UI效果的话,可以把组件改为无状态组件,需要展示的数据和方法直接接受父组件传过来的就可以了

import React, { Fragment } from 'react';
import 'antd/dist/antd.css'
import {Input,Button,List} from 'antd'
 const TodoListUI=(props)=>{
     return (
        <Fragment>
            <div className="form-box">
            <Input placeholder="请输入" value={props.inputValue} onChange={props.handleChange}style={{width:'300px'}}/>
            <Button type="primary" style={{marginLeft:'20px'}} onClick={props.handleSubmit}>提交</Button>
        </div>
        <div  className="list">
            <List
                size="small"
                bordered
                dataSource={props.list}
                renderItem={(item,index) => (<List.Item onClick={()=>{props.handleDelete(index)}}>{item}</List.Item>)}
            />
        </div>      
        </Fragment>
     )
 }

export default TodoListUI;

5.ajax请求放在(componentDidMount)中,因为componentDidMount生命周期的话,打开只会渲染一次,这样会大大的提高了性能

6.父子组件传值的时候,使用shouldComponentUpdate来判断父向子传的内容是否有变化,没变化的话,子组件就不需要渲染

7.如果觉得上面这个方法麻烦的话,我们可以定义组件的时候,不要使用Component而是使用纯函数PureComponent,这样的话,如果使用redux的时候,当前该组件所使用的数据没有发生变化的话,组件是不会重新渲染的

 

转载于:https://www.cnblogs.com/cythia/p/9774010.html

相关文章:

  • Oracle临时表空间为何暴涨?
  • 对一个日期型对象怎么加一年,或加一个月
  • VS中使用git
  • 开始关注D语言
  • 4、Linux常用命令
  • 跨域的环境下 onbeforunload事件
  • Kubernetes哪一点最打动你?或者,它发布过的哪一项特性让你认为最厉害?
  • 老外写的正则表达式的类
  • Cookie和Session
  • 浙江金华 图论整理
  • [转]成功创业家的心理
  • linux安装jdk
  • 经典英语摘录
  • Message Loop 原理及应用
  • JVM内存区域划分
  • Bootstrap JS插件Alert源码分析
  • echarts的各种常用效果展示
  • HashMap ConcurrentHashMap
  • idea + plantuml 画流程图
  • iOS 系统授权开发
  • JS函数式编程 数组部分风格 ES6版
  • laravel 用artisan创建自己的模板
  • Median of Two Sorted Arrays
  • nginx 负载服务器优化
  • React的组件模式
  • Vue实战(四)登录/注册页的实现
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 讲清楚之javascript作用域
  • 人脸识别最新开发经验demo
  • 如何优雅地使用 Sublime Text
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 微信开源mars源码分析1—上层samples分析
  • 从如何停掉 Promise 链说起
  • # 计算机视觉入门
  • #Spring-boot高级
  • #图像处理
  • (Note)C++中的继承方式
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (zt)最盛行的警世狂言(爆笑)
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)ORM
  • .NET HttpWebRequest、WebClient、HttpClient
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/C# 使窗口永不获得焦点
  • .NET下的多线程编程—1-线程机制概述
  • .NET与 java通用的3DES加密解密方法
  • /usr/bin/env: node: No such file or directory
  • ??eclipse的安装配置问题!??
  • @EnableConfigurationProperties注解使用
  • @property python知乎_Python3基础之:property
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [20160807][系统设计的三次迭代]