当前位置: 首页 > 知识库问答 >
问题:

Reack钩子useState(初始化函数)调用两次,即使完全不改变数据?

翟柏
2023-03-14

在本例中,我仅使用初始值设定项函数调用useState

import React, { useState } from "react";
import "./styles.css";

export default function App() {
  const [data, setData] = useState(() => {
    console.log('Getting initial state...');

    return {};
  });

  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
    </div>
  );
}

从控制台中可以看到,useState函数被调用了两次。这是正常的行为,有什么原因吗?

共有1个答案

武功
2023-03-14

这是由包装您的应用程序的严格模式造成的。

在严格模式下,react故意运行一些生命周期方法两次,以帮助检测错误。

从文档中:

严格模式不能自动为您检测副作用,但它可以通过使副作用更具确定性来帮助您发现副作用。这是通过故意双重调用以下函数来实现的:

类组件构造函数、渲染和应该组件更新方法类组件静态getDerivedStateFromProps方法函数组件主体状态更新函数(setState的第一个参数)传递给useState、useMemo或useReucer的函数

注:这仅适用于开发模式。在生产模式下不会双重调用生命周期。

 类似资料:
  • 问题内容: React有一个叫做useState的钩子,在向功能组件添加状态时使用。 该挂钩API参考状态: useState : 返回一个有状态值,以及一个更新它的函数。 在初始渲染期间,返回的状态()与作为第一个参数()传递的值相同。 该功能用于更新状态。它接受一个新的状态值并排队重新呈现组件。 该阵营文档状态: 作为论点我们要传递什么? 挂钩的唯一参数是初始状态。与类不同,状态不必是对象。如

  • 有一个带有正方形的板,其值取决于数组,它由hook处理。每次单击都会将值提高一,但不幸的是,它会将值提高两次(第一次单击除外)。 我的问题是: (1) 为什么会发生这种情况,(2)如何避免它,以及,一般来说,(3)有没有更好的方法来处理这样一个带有钩子的数组。 日志: 可以看出,从第二次点击开始,每次点击都会提高两次值。

  • 我试图在一个功能组件中调用一个API,它是一个反应挂钩,并基于结果,重新呈现组件的内容。下面是代码: 调用API的组件- 以下是功能: 我正在尝试获取状态数据,并根据数据重新渲染组件。这里处于调用外部API的操作中。 正在调用操作并成功获取数据,但我不确定为什么状态正在更新-我得到了以下错误- 在函数“setResults”中调用React钩子“useState”,该函数既不是React函数组件,

  • 问题内容: 我有两个班,第一个是我的主班,第二个是我的编辑框架班。 我的第二个类(UpdateGUI)在其构造函数中提供oldName,并对其进行编辑,当我单击时,它将newName发送给我的第一个类。 我的第二堂课: 我的问题是,为什么newName为null? 更新: UpdateGUIDialog类: 输出: 我需要打印而不是null。 问题答案: Java对象有点像真实对象。并顾名思义:它

  • 1、什么是初始化函数 初始化函数的意思是,当你创建一个实例的时候,这个函数就会被调用。 比如: 当代码在执行 a = ClassA() 的语句时,就自动调用了 __init__(self) 函数。 而这个 __init__(self) 函数就是初始化函数,也叫构造函数。 初始化函数的写法是固定的格式:中间是 init,意思是初始化,然后前后都要有【两个下划线】,然后 __init__() 的括号中

  • 我正在尝试使用react钩子创建一个悬停以显示div,我遇到了以下问题: 第69:31行:在函数“renderHideOptionalClauseTrigger”中调用React钩子“useState”,该函数既不是React函数组件,也不是自定义React钩子函数React钩子/钩子规则 搜索关键字以了解有关每个错误的更多信息。 以下是我的代码库: