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

使用状态钩子,设置状态函数。访问以前的状态值

温源
2023-03-14

这两个是等价的吗?如果不是,哪一个是最好的,为什么?

const [count, setCount] = useState(initialCount);
<button onClick={() => setCount(count + 1)}>+</button>
const [count, setCount] = useState(initialCount);
<button onClick={() => setCount(prevCount => prevCount + 1)}>+</button>

共有2个答案

麹正业
2023-03-14

这两个例子都是有效的,工作原理相同。但是,我怀疑原语的操作与函数相同,因为JavaScript支持一级/高阶函数。这意味着函数将被视为任何其他变量,允许将它们作为参数传递,将它们分配给变量,并在任何其他函数中返回它们。

徐鸿文
2023-03-14

如果下一个状态值取决于上一个值,如本例中的增量按钮,则最好使用setState(setCount(prevCount))的功能版本=

如果将setter函数传递给回调函数(如onChange或HTTP请求-响应处理程序),则可能会遇到错误。

作为一个明确的例子,在下面的页面中,如果您单击“延迟计数器(基本)”,然后单击“立即计数器”,则计数只会增加1。但是,如果单击“延迟计数器(功能)”,然后单击“立即计数器”,则计数最终将增加2。

import React, { useState } from "react";
import ReactDOM from "react-dom";

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <h1>{count}</h1>
      <button onClick={() => setTimeout(() => setCount(count + 1), 2000)}>
        Delayed Counter (basic)
      </button>
      <button onClick={() => setTimeout(() => setCount(x => x + 1), 2000)}>
        Delayed Counter (functional)
      </button>
      <button onClick={() => setCount(count + 1)}>Immediate Counter</button>
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<Counter />, rootElement);

 类似资料:
  • 提前谢了。我有一个状态数组,如下所示。 我需要添加一个项目到状态数组,我发现我们不需要做状态突变。如何使用PrevState设置状态。 如何调用set State以追加此状态数组。 像这样的东西?

  • 我想用React useState钩子设置多个状态值,这样我就可以用useEffect钩子分别更新它们。我有以下代码: 但是当我用React DevTools检查应用程序时,我会看到钩子的多个“状态”值,而不是“订单”、“支付”、“提交”等。

  • 我正在调用这个函数。因为它在增加值,但是当我访问它时,它返回以前的值。我想访问同一函数中最新更新的值,我应该做什么。 如何访问同一函数中的最新状态值

  • 我有一个名为的组件,还有一个子组件名为。智利组件有一个名为的状态。我需要从AvailabiltyCalendar组件访问该状态并获取该状态值。我该怎么做呢。 可用压路机组件 DatePicker组件

  • 我想在状态尚未装入时访问状态的属性。 我想做4,但得到以下错误: P. S也不起作用。

  • 在基于类的React组件中,我们可以使用setState的函数形式定义处理函数,例如: 其中,两个参数表示传递给此组件的先前状态和更新的道具。 类似地,我们有一个函数形式,使用useState钩子在函数组件中设置状态,如下所示: 但正如我们所看到的,useState钩子中的函数形式缺少表示更新的道具的第二个参数 这是React开发团队故意留下的吗?在useState钩子中设置状态时,我们如何访问更