手写对象浅比较(React中pureComponent和Component区别)

这篇具有很好参考价值的文章主要介绍了手写对象浅比较(React中pureComponent和Component区别)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PureComponent和Component的区别

        PureComponent会给类组件默认加一个shouldComponentUpdate这样的周期函数

  //PureComponent类似自动加了这段
  shouldComponentUpdate(nextProps,nextState){
    let { props, state } = this;
    // props/state:修改之前的属性状态
    // nextProps/nextState: 将要修改的属性状态
    return !shallowEqual(props,nextProps) || !shallowEqual(state,nextState)
  }
  •   在此周期函数中,它对新老的属性/状态 会做一个浅比较
  •   如果经过浅比较,发现属性和状态并没有改变,则返回false(也就是不继续更新组件),有变化才会去更新!!
  • 当使用component时,父组件的state或prop更新时,无论子组件的state、prop是否更新,都会触发子组件的更新,这会形成很多没必要的render,浪费很多性能;
  • pureComponent的优点在于:pureComponent在shouldComponentUpdate只进行浅层的比较,只要外层对象没变化,就不会触发render,减少了不必要的render,当遇到复杂数据结构时,可以将一个组件拆分成多个pureComponent,以这种方式来实现复杂数据结构,以期达到节省不必要渲染的目的,如:表单、复杂列表、文本域等情况

pureComponent的优缺点:

  1. pureComponent的优点:不需要开发者使用shouldComponentUpdate就可使用简单的判断来提升性能;
  2. pureComponent的缺点:由于进行的是浅比较,可能由于深层的数据不一致导致而产生错误的否定判断,从而导致页面得不到更新;

手写对象的浅比较

1.浅比较含义:只比较对象的第一级,对于深层次内容,不会再进行比较

2.浅比较实现思路图

手写对象浅比较(React中pureComponent和Component区别),react.js,前端,javascript

3.代码实现以及注释思路

//检测是否为对象
const isObject = function isObject(obj) {
  return obj !== null && /^(object|function)$/.test(typeof obj); //typeof obj === "object"
};
//对象的浅比较
const shallowEqual = function shallowEqual(objA, objB) {
  if (!isObject(objA) || !isObject(objB)) return false; //如果有一个不是对象就返回false
  if (objA === objB) return true;
  // 先比较成员的数量
  let keysA = Reflect.ownKeys(objA),
    keysB = Reflect.ownKeys(objB);

  if (keysA.length !== keysB.length) return false;
  //数量一致,再逐一比较内部的成员(只比较第一级:浅比较)
  for (let i = 0; i < keysA.length; i++) {
    let key = keysA[i];
    // 如果一个对象中有这个成员,一个对象中没有,或者都有这个成员,但是成员值不一样,都应该被判定为不相同!!
    //NAN ===NAN 返回是false
    //Object.is(NAN,NAN) 返回是true 底层也是三个等号
    if (!objB.hasOwnProperty(key) || !Object.is(objA[key], objB[key])) {
      //objA[key] !== objB[key]
      return false;
    }
  }
  //以上都处理完,发现没有不相同的成员,则认为两个对象是相等的
  return true;
};

 文章来源地址https://www.toymoban.com/news/detail-568775.html

到了这里,关于手写对象浅比较(React中pureComponent和Component区别)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • React--Component组件浅析

    在 React 世界里,一切皆组件,我们写的 React 项目全部起源于组件。组件可以分为两类,一类是类( Class )组件,一类是函数( Function )组件。 本章节,我们将一起探讨 React 中类组件和函数组件的定义,不同组件的通信方式,以及常规组件的强化方式,帮助你全方位认识

    2024年02月08日
    浏览(28)
  • 手写一个 React 图片预览组件

    原文链接: 手写一个 React 图片预览组件 前几天打算给博客添加一个图片预览的效果,可在网上找了半天也没找到合适的库,于是自己干脆自己手写了个。 最终实现效果如下: 当鼠标点击图片时生成一个半透明遮罩,并添加一个与点击图片位置大小都相同的图片,之后通过

    2024年02月08日
    浏览(37)
  • 手写react--fiber架构如何中断和恢复

    React 17 版本开始提供了一个新的JSX转换方案。在之前,JSX 代码会被默认编译成  React.createElement(...)  ,而使用新 JSX 方案后,会从一个独立的模块 react/jsx-runtime 中引入 JSX 函数。 babel插件@babel/plugin-transform-react-jsx /** @jsxRuntime classic */  babel运行时转换 render 创建最初始的fiber对

    2024年02月16日
    浏览(47)
  • react【五】redux/reduxToolkit/手写connext

    pm install redux --save store yarn add react-redux yarn add redux-thunk 每个页面可能都会有自己的store为了方便维护,将store按照页面划分 npm install @reduxjs/toolkit react-redux 需要在根组件传递store的值

    2024年02月19日
    浏览(25)
  • Unable to find node on an unmounted component in React

    小众错误一枚,网上都说需要react版本没有升级原因,因为是内部错误,控制台又无法定位到代码哪一行报错,网上又没有类似的解决方法,特此记录思路,供大家参考。 通过网上说的版本原因,合理推测是因为react 3.x版本对4.x写法的不兼容导致的,经过多部分排查改正,将

    2024年01月22日
    浏览(51)
  • 【React】React组件生命周期以及触发顺序(部分与vue做比较)

    最近在学习React,发现其中的生命周期跟Vue有一些共同点,但也有比较明显的区别,并且执行顺序也值得讨论一下,于是总结了一些资料在这里,作为学习记录。 由ReactDOM.render()触发 —— 初次渲染 constructor() —— 类组件中的构造函数 static getDerivedStateFromProps(props, state) 从pr

    2024年02月07日
    浏览(45)
  • antd List 滚动加载(InfiniteScroll ) react-infinite-scroll-component 重置滚动条

    问题 :在页面滚动的时候,infiniteScroll 页面数是自动+1。举个例子,页面加载到第三页,infiniteScroll 无法在重新开始计数,而在某些场景中需要重新开始计数,比如切换月份等(按照需求),page number 需要重新计数。(切换后会自动滚动到上一次滚动位置,自动调用接口)

    2024年02月22日
    浏览(33)
  • Vue 和 React 前端框架的比较

    本文研究了流行的前端框架 Vue 和 React 之间的区别。通过对它们的学习曲线、视图层处理方式、组件化开发、响应式数据处理方式和生态系统及社区支持进行比较分析,得出了它们在不同方面的优劣和特点。该研究对于开发者在选择合适的前端框架时提供参考。 Vue 是一款由

    2024年02月13日
    浏览(63)
  • React与Vue:前端框架的比较

    在前端开发领域,React和Vue是两个备受瞩目的框架。它们都提供了构建用户界面的强大工具,但它们在实现方式、性能和设计理念上存在一些关键差异。本文将深入探讨这两个框架之间的主要区别。 首先,让我们从数据流的角度来看。在Vue中,数据流是双向的,这意味着组件

    2024年01月20日
    浏览(45)
  • 比较react和vue的响应式原理

    React 和 Vue 都使用虚拟 DOM 来提高性能,但在响应式原理和状态管理方面有一些不同。React 更注重单向数据流和手动状态管理,而 Vue 强调响应式数据绑定和自动状态追踪,使开发更加便捷。 React的响应式原理: 虚拟 DOM和单向数据流 :React 使用虚拟 DOM(Virtual DOM)来管理和渲

    2024年02月07日
    浏览(93)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包