react的严格模式 和 解决react useEffect执行两次

这篇具有很好参考价值的文章主要介绍了react的严格模式 和 解决react useEffect执行两次。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

useEffect执行两次


这个问题,主要是刚接触react的时候发的问题,当时也没总结。现在回过头来再总结一次!!!


前言

能发现这个问题的👨‍🎓,一定是一名细心并且有一颗求知的❤️。
因为我当时接触React的时候就是这样的想法。为什么会触发两次?按照正常的声明周期应该执行一次的!!!!!

一、为什么useEffect执行两次

1.React的严格模式(模版创建项目👇)

  1. npx create-react-app my-app 创建React项目
  1. npx create-react-app my-app --template typescript 创建typeScript模版的React项目

2.React的严格模式(StrictMode包裹显渲染组件)

root.render(
  //就是下面的代码 React.StrictMode
  <React.StrictMode>
    <App />
  </React.StrictMode>
);


3.React的严格模式作用

StrictMode 是一个用来突出显示应用程序中潜在问题的工具。StrictMode 不会渲染任何可见的 UI。StrictMode 为其后代元素触发额外的检查和警告。

⚠️严格模式检查仅在开发模式下运行;它们不会影响生产构建。开发发挥作用、线上会自动屏蔽【StrictMode】

作用1:识别不安全的生命周期

React开发中使用严格模式的作用主要是为了识别 Class组件中一些逐渐废弃的组件生命周期,还有引用的第三方组件库中的一些生命周期方法。

React中使用严格模式,一旦发现有风险的生命周期的使用就会在控制台中提出警告

作用2:关于使用过时字符串 ref API 的警告

refs为字符串的危害⚠️

如下图

react useeffect执行了两次,React,react.js,javascript,前端

作用3:关于使用废弃的 findDOMNode 方法的警告

findDOMNode 也可用于 class组件,但它违反了抽象原则,它使得父组件需要单独渲染子组件。
它会产生重构危险,你不能更改组件的实现细节,因为父组件可能正在访问它的 DOM节点。

findDOMNode 只返回第一个子节点,但是使用 Fragments,组件可以渲染多个 DOM 节点。findDOMNode是一个只读一次的 API。
调用该方法只会返回第一次查询的结果。如果子组件渲染了不同的节点,则无法跟踪此更改。因此,findDOMNode仅在组件返回单个且不可变的 DOM 节点时才有效。

作用4:检测意外的副作用(useEffect副作用)

1.React的工作阶段

React 分两个阶段工作:

1.渲染阶段: 会确定需要进行哪些更改,比如 DOM。在此阶段,React 调用 render,然后将结果与上次渲染的结果进行比较。

2.提交阶段: 发生在当 React 应用变化时。(对于 React DOM 来说,会发生在 React 插入,更新及删除 DOM 节点的时候。)在此阶段,React 还会调用 componentDidMount 和 componentDidUpdate 之类的生命周期方法。

2.React严格模式的重复调用

严格模式不能自动检测到你的副作用,但它可以帮助你发现它们。通过故意重复调用以下函数来实现的该操作:

class 组件的
constructor、render 、shouldComponentUpdate
组件的生命周期方法: getDerivedStateFromProps

函数组件通过使用 useState,useMemo 或者useReducer

3.Tips

⚠️⚠️⚠️:严格模式采用故意重复调用方法(如组件的构造函数)的方式,使得这种 bug 更容易被发现。

作用5:检测过时的 context API

过时的 context API 容易出错,将在未来的主要版本中删除。在所有 16.x 版本中它仍然有效,但在严格模式下,将显示以下警告:

二、解决useEffect执行两次(删除严格模式)

代码如下

  //就是下面的代码 React.StrictMode
  // <React.StrictMode>
    <App />
  // </React.StrictMode>

图片如下

react useeffect执行了两次,React,react.js,javascript,前端

关闭严格模式前,如下图:

react useeffect执行了两次,React,react.js,javascript,前端

关闭严格模式后,如下图:

react useeffect执行了两次,React,react.js,javascript,前端

总结

希望本文对你的困惑会有所帮助!!!!!

努力的👨‍🎓(👩‍🎓)运气都不会差,💪💪💪文章来源地址https://www.toymoban.com/news/detail-766295.html

到了这里,关于react的严格模式 和 解决react useEffect执行两次的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • React Hooks 源码解析:useEffect

    React Hooks 源码解析(4):useEffect React 源码版本: v16.11.0 源码注释笔记:airingursb/react 1.1 为什么要有 useEffect 我们在前文中说到 React Hooks 使得 Functional Component 拥有 Class Component 的特性,其主要动机包括: 在组件之间复用状态逻辑很难 复杂组件变得难以理解 难以理解的 class 对

    2024年01月21日
    浏览(43)
  • 通过chatgpt 学习React的useEffect

    定义: useEffect 是 React 中的一个 Hook,它用于处理函数组件中的副作用操作。副作用操作可以包括数据获取、订阅事件、定时器等。 useEffect 接受两个参数:第一个参数是一个回调函数,用于执行副作用操作;第二个参数是一个数组,用于指定依赖项,只有当依赖项发生变化时

    2024年02月10日
    浏览(40)
  • 【React 】useLayoutEffect 和 useEffect的区别

    useLayoutEffect 和 useEffect 是React中常用的两个Hook,它们的主要区别在于触发时机。 useEffect 会在渲染完成后异步执行,不会阻塞浏览器的绘制操作。它适用于需要在组件渲染后执行副作用的情况,例如数据的获取、订阅事件等。它不会阻止屏幕更新,因此可能会导致渲染的一次

    2024年02月09日
    浏览(41)
  • React - useEffect函数的理解和使用

    我们知道,react 的函数组件里面没有生命周期的,也没有 state,没有 state 可以用 useState 来替代,那么生命周期呢? useEffect 是 react v16.8 新引入的特性。我们可以把 useEffect hook 看作是componentDidMount、componentDidUpdate、componentWillUnmounrt三个生命周期的组合。可以让你在函数式组件

    2024年02月13日
    浏览(36)
  • 理解 React 中的 useEffect、useMemo 与 useCallback

    先理解 useEffect 有助于学习 useMemo 和 useCallback。因为 useMemo 和 useCallback 的实现实际上都是基于 useEffect 的。 useEffect 是 React 中的一个很重要的 Hook,用于执行副作用操作。什么是副作用?简单来说,就是那些会改变函数外部变量或有外部可观察影响的操作。useEffect 允许你在函

    2024年02月03日
    浏览(44)
  • React hooks之useEffect、useMemo优化技巧

    useEffect使用JSON.stringfy进行过滤,避免重复执行 将数组直接放入依赖数组可能不会按预期工作,因为数组比较是基于引用而不是内容。也就是说,如果数组引用没有变,即使数组内容发生了变化,副作用也不会重新运行。或者数组内饿哦那个没有改变但是引用却发生变化时,

    2024年02月12日
    浏览(49)
  • react18中,useState 和 useEffect有什么区别

    useState 目的:useState用于在函数组件中添加状态。之前,只有类组件才能有自己的状态,但useState钩子使得函数组件也能够利用React的状态特性。 使用场景:当你需要在组件中存储、读取或更新一些数据时使用。例如,控制输入框的内容、切换按钮的状态等。 工作原理:useS

    2024年02月19日
    浏览(40)
  • 前端react入门day04-useEffect与Hook函数

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 useEffect 的使用 useEffect 的概念理解 useEffect 依赖项参数说明 useEffect — 清除副作用 自定义Hook实现 React Hooks使用规则 useEffect是一个React Hook函数,用于在React组件中 创建不

    2024年01月22日
    浏览(56)
  • React钩子函数之useEffect,useLayoutEffect与useInsertionEffect的区别

    React钩子函数在React开发中扮演着非常重要的角色。其中,useEffect、useLayoutEffect和useInsertionEffect是三个常用的钩子函数,它们的作用虽然有些相似,但是也存在一些区别。在本文中,我们将详细介绍这三个钩子函数的区别,以及它们在React开发中的应用。 首先,我们来了解一下

    2024年02月11日
    浏览(40)
  • react useState useEffect useMemo实际业务场景中的使用

    下面的代码实现了上面图片的功能

    2024年02月16日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包