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

它们是使用useState钩子更新状态的函数形式吗?useState钩子包含更新的道具和以前的状态?

宋高扬
2023-03-14

在基于类的React组件中,我们可以使用setState的函数形式定义处理函数,例如:

const handleClick =()=> {this.setState((prevState,updatedProps)=>({// return some object }))}

其中,两个参数表示传递给此组件的先前状态和更新的道具。

类似地,我们有一个函数形式,使用useState钩子在函数组件中设置状态,如下所示:

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

const handleClick =()=> {setCount(c=>c+1)}

但正如我们所看到的,useState钩子中的函数形式缺少表示更新的道具的第二个参数

这是React开发团队故意留下的吗?在useState钩子中设置状态时,我们如何访问更新的道具以及以前的状态?描述问题的实际代码:代码沙盒链接

只需通过在应用程序组件中一次导入一个计数器组件,在两个计数器组件(一个是功能组件,另一个是基于类的)之间进行切换。

共有1个答案

毛声
2023-03-14

为什么不像这样触发useEffect中的计数(我这样修改了你的FunctionalCounter),阅读代码中的注释。

(相当hacky的方式,所以它只会改变,如果道具值是由点击触发)

import React, { useState, useEffect } from "react";

export default function FunctionalCounter(props) {
  const [count, setCount] = useState(100);
  const [shouldTrigger, setShouldTrigger] = useState(false);

useEffect(() => {
  if (shouldTrigger) {
    setCount((c) => c + props.fromParent);
    setShouldTrigger(false);
  }
}, [props.fromParent,shouldTrigger]);

  return (
    <div>
      <h3> The counter value is {count}</h3>
      <button
        onClick={() => {
          props.handleUpdate();
          setShouldTrigger(true);
        }}
      >
        Click me
      </button>
    </div>
  );
}

我能想到的另一种方法是返回道具上的值。handleUpdate()这样您就可以使用它而不必依赖于父级,就像这样:

App.js

  const handleUpdate = () => {
    const newVal = appVar + 1
    setAppVar(newVal);
    return newVal;
  }

功能计数器。js

import React, { useState } from "react";

export default function FunctionalCounter(props) {
  const [count, setCount] = useState(100);

  return (
    <div>
      <h3> The counter value is {count}</h3>
      <button
        onClick={() => {
          const newCount = props.handleUpdate();
          setCount(newCount);
        }}
      >
        Click me
      </button>
    </div>
  );
}

 类似资料:
  • 我有一个对象的状态数组: 我有一个添加按钮,用于将对象添加到数组中,这是onclick事件的主体:

  • 我正在构建一个制表符视图,我不明白为什么useState钩子没有更新我的状态。我肯定这是件容易的事,但我在这里已经被难住了一段时间... 我可以看到onPress函数已启动,如果我注销,则item.label是正确的。但是,即使我硬编码参数,setState也不会更改。

  • 问题内容: 我发现React Hooks文档的这两部分有些令人困惑。使用状态挂钩更新状态对象的最佳实践是哪一种? 想象一下要进行以下状态更新: 选项1 从使用React Hook的文章中,我们可以做到: 所以我可以做: 然后: 选项2 从钩子参考中我们可以得出: 与类组件中的setState方法不同,useState不会自动合并更新对象。您可以通过将函数更新程序形式与对象传播语法结合使用来复制此行

  • 我发现这两个反应钩文档有点混乱。使用状态钩子更新状态对象的最佳实践是哪一个? 假设一个用户希望进行以下状态更新: 选择1 从使用React Hook一文中,我们可以看出这是可能的: 所以我可以做: 然后呢: 选择2 从Hooks参考中我们得到: 与类组件中的setState方法不同,useState不会自动合并更新对象。通过将函数更新程序窗体与对象扩展语法相结合,可以复制此行为: 据我所知,两者都

  • 我正在React中使用useState钩子,状态将不会在

  • 我正在尝试使用注册功能组件中的useState更新组件的状态。当用户输入无效的电子邮件地址并单击“提交”按钮时,以下代码将返回错误消息 我想用这段代码将错误消息设置为formData。 如何将错误消息设置为formData? 这是我的密码: