美文网首页React基础
React拓展6-PureComponent

React拓展6-PureComponent

作者: 生命里那束光 | 来源:发表于2022-04-24 21:07 被阅读0次

用于避免重复渲染(执行render函数),提高效率

Component的2个问题

  1. 当组件中运行方法setState({})。哪怕该方法的参数为一个空对象,该组件和其子组件都会被重新渲染

  2. 只当前组件重新render(), 就会自动重新render子组件 ==> 效率低

效率高的做法

  • 只有当组件的state或props数据发生改变时才重新render()

原因

  • Component中的shouldComponentUpdate()总是返回true

解决方法

办法1:
重写shouldComponentUpdate()方法
比较新旧state或props数据, 如果有变化才返回true, 如果没有返回false
办法2:
使用PureComponent
PureComponent重写了shouldComponentUpdate(), 只有state或props数据有变化才返回true
注意:
只是进行state和props数据的浅比较, 如果只是数据对象内部数据变了, 返回false
不要直接修改state数据, 而是要产生新数据
项目中一般使用PureComponent来优化

(1)PureComponent来自于React组件库
(2)PureComponent有一个问题,如果setState的参数与this.state是同一个对象的话,也不会更新组件。需要使用纯函数

state = {
  username: "Tom",
};
handExchange = () => {
  let obj = this.state;
  obj.username = "jack"
  this.setState({ obj });
};
shouldComponentUpdate(nextProps, nextState) {
  console.log(nextProps);
  console.log(nextState);
  return true;
}

应当改为

state = {
  username: "Tom",
};
handExchange = () => {
  let {username} = this.state;
  username = "jack"
  this.setState({ username });
};
shouldComponentUpdate(nextProps, nextState) {
  console.log(nextProps);
  console.log(nextState);
  return true;
}

相关文章

  • React拓展6-PureComponent

    用于避免重复渲染(执行render函数),提高效率 Component的2个问题 当组件中运行方法setState...

  • react拓展

    setState() setState更新状态的2种方式 对象式的setState 函数式的setState 对象...

  • 拓展4 (React)

    以下读http://www.ruanyifeng.com/blog/2015/03/react.html 笔记 J...

  • 拓展 (React 4)

    React-redux 产生原因: 一个状态可能被多个组件依赖或者影响,兼顾组件之间共享状态问题和共享状态可能被任...

  • 拓展(React 2)

    为什么不直接从 JSX 直接渲染构造 DOM 结构,而是要经过中间这么一层呢? 第一个原因是,当我们拿到一个表示 ...

  • 拓展 React3

    一、高阶组件(Higher-Order Components) 高阶组件就是一个函数,传给它一个组件,它返回一个新...

  • react JSX语法

    jsx语法 概念:react定义的一种类似于xml的js拓展语法 作用:用来创建react的虚拟DOM对象的var...

  • react 学习笔记 使用 jsx 语法

    react 学习笔记 使用 jsx 语法 概念 JSX 是一种 JavaScript 的语法拓展。我们推荐 rea...

  • React Navigation BottomTab 拓展版

    默认支持了 badge 角标功能,移除了原版的 tabBarOptions 属性,将 tabBarOptions ...

  • React拓展4-Fragment

    Fragment 组件能够在不额外创建 DOM 元素的情况下,让 render() 方法中返回多个元素。 一个常见...

网友评论

    本文标题:React拓展6-PureComponent

    本文链接:https://www.haomeiwen.com/subject/dlzaertx.html