javascript - useState 中没有 () 的函数( react 钩子(Hook))

标签 javascript reactjs react-hooks

当我将函数参数传递给 useState() 时,如下所示:

const [testA, setTestA] = useState(returnTestA());  // run every rendering
const [testB, setTestB] = useState(returnTestB); // run only mount
  • 带有 () 的函数在每次渲染时运行
  • 但不带 () 的函数仅在第一次渲染(mount)时运行

这是我的整个代码:(info.js)

import React, { useState } from "react";

let count = 0;

const returnTestA = () => {
  count++;
  console.log("test A: " + count);
  return "test";
};

const returnTestB = () => {
  count++;
  console.log("test B: " + count);
  return "test";
};

const Info = () => {
  const [name, setName] = useState("");
  const [testA, setTestA] = useState(returnTestA());  // run every rendering
  const [testB, setTestB] = useState(returnTestB); // run only mount

  const onChangeName = e => {
    setName(e.target.value);
  };

  return (
    <div>
      <div>
        <input name="name" value={name} onChange={onChangeName} />
      </div>
      <div>
        <div>
          <b>Name:</b> {name}
        </div>
      </div>
    </div>
  );
};

export default Info;

结果是:

  1. 只需 npm start: npm_start

  2. 在输入中输入一些内容: type_something

为什么会这样?最佳实践是什么?

最佳答案

官方解释参见:https://reactjs.org/docs/hooks-reference.html#lazy-initial-state

const [testB, setTestB] = useState(returnTestB);

它类似于:

const [testB, setTestB] = useState(() => returnTestB());

你将一个函数作为参数传递给useState()方法,该函数在挂载时只会运行一次。

但是对于

const [testA, setTestA] = useState(returnTestA());

你将一个计算对象作为参数传递给useState(),该对象将在每次渲染时被计算。

关于javascript - useState 中没有 () 的函数( react 钩子(Hook)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60500859/

相关文章:

javascript - 将 Javascript 的 setInterval 函数设置为可变数量——可能吗?

reactjs - 如何在登录页面中隐藏标题组件

reactjs - 输入范围 slider 作为 react Hook 不滑动

reactjs - useHistory react-router-dom 无效钩子(Hook)调用

javascript - React useEffect 清理函数意外调用

javascript - IE 中的 XMLHttpRequest.responseURL

javascript - 一致的图形绘制

javascript - Node.js 错误 : "Cannot assign to read only property ' _connections'"

javascript - 如何构建 create-react-app 让客户无法以有组织的方式查看代码

reactjs - 我如何使用导航将 Prop 传递到下一个屏幕