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

React Hooks状态总是落后一步[重复]

葛奇
2023-03-14

我在React中有各种各样的函数,其中我需要使用useState更改状态,然后根据新状态是否满足某些条件执行一些操作。

当使用prop=“newpassword”调用handleChange时,它使用useState中的setValues方法设置newpassword的值。然后使用正则表达式测试对新密码进行评估,如果它有效,则状态变量passwordIsValid应设置为true。

const handleChange = prop => event => {
    setValues({ ...values, [prop]: event.target.value })

    if (prop === 'newpassword' && passwordValidation.test(values.newpassword)) {
      setValues({ ...values, passwordisValid: true })
      console.log(prop, values.passwordisValid)
    } else {
      console.log(prop, values.passwordisValid)
    }
  }

状态总是比tho慢一步,我知道这是因为useState是异步的,但我不知道如何使用useEffect检查状态?胡克斯是个新手,有人能帮我吗?

共有2个答案

刁越
2023-03-14

在任何特定的渲染中,道具和状态永远保持不变,组件渲染中的每个函数(包括事件处理程序、效果、超时或其中的API调用)都会捕获定义它的渲染调用的道具和状态。因此,如果您尝试在事件处理程序中访问values.new密码,您将始终获得该特定渲染的状态,即旧密码。

只要把useState想象成一个函数,它返回特定渲染的状态,并且该状态对于特定渲染是不可变的。

汪玮
2023-03-14

useState()hook只是一个函数调用。它返回值和函数对<代码>值只是一个常量,它没有任何属性绑定。

// Think of this line
const [values, setValues] = useState(0);

// As these two lines
const values = 0;
const setValues = someFunction;

调用setValuesreact时,将更新下一次渲染的值。下次组件渲染时,它将再次调用useState,该调用将返回新值。

作为解决方案,您应该使用event.target.value。你不想直接使用它,因为event.target在你观察它后就无效了。

const newValue = event.target.value
// use newValue to setValues etc
 类似资料:
  • 问题内容: 我正在使用ReactJS构建一个非常原始的测验应用程序,但无法更新组件的状态。它的行为是,尽管在以下方面始终落后一步,但它仍为DOM提供了正确的数组索引: 问题答案: 是不必是同步操作: 不会立即变异,但会创建待处理的状态转换。向后进入 无法保证对呼叫的同步操作,并且可以为提高性能而对呼叫进行批量处理。 因此,此处可能仍保留先前的值: 相反,请 使用 状态转换完成后调用的回调函数:

  • 我还没反应过来。我已经学了几个月了。我目前正在使用ant-design创建标记,并试图在单击时删除它们。我有一个用户的状态,根据他们想要删除或创建标记,用户状态会更新。但是,当I删除标记时,状态不会立即更新,并在中的I返回空数组。我看过以前类似的问题,但是它们使用,但这不适合我的用例。我还尝试将这个放在代码的返回部分,这在某种程度上解决了问题,但是,每当我从用户表中选中一个复选框时,标记的颜色就会

  • 我在我的反应容器中有加减法函数,每当点击跨度'或'-'时都会传递这些函数,以便计算给定不同价格值的三种'产品'的总'价格'。 我的问题是:当我第一次点击任一按钮时,它首先记录初始值0,然后随着每次点击,从总数中增加或减少,但总是落后一步。 例如,如果我点击“苹果,价格:2”,我的控制台记录为0。然后,我将单击“pears,price:5”,我的控制台将记录2,将上一次单击的值相加,而不是将5添加到

  • 我试图使用React Hooks来管理一个简单的文本输入字段和提交输入按钮的状态。输入字段不断验证(现在只是检查长度 我已将参数扩展为setMuffinSettings,以显式返回一个对象,并已确认此返回对象的顺序为:true。因此,问题与setMuffinSettings本身有关,而不是传递给setMuffinSettings的对象不正确。 我还研究了另外两个与React挂钩(特别是挂钩)和“落

  • 我试图在5秒后设置状态中的值。但是在5秒之后,它在行显示错误。 代码片段 错误: TypeError:this.setState不是函数 如何解决这个问题?

  • 当我在onSaveInstanceState方法中将数据成功保存到Bundle时,我无法找出为什么onCreate方法中的savedInstanceState总是为null。当我在AVD上运行我的程序并单击“上一步”按钮(销毁活动),然后通过单击其图标再次创建程序时,保存的状态始终为空。下面是一个测试这个问题的简单程序。 如果可能的话,告诉我如何解决这个问题。