首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React Hooks状态未更新

React Hooks状态未更新
EN

Stack Overflow用户
提问于 2019-12-13 21:50:08
回答 3查看 93关注 0票数 0

我无法更新我的react钩子状态。

这就是我正在做的(这是一个精简的相关代码)。

代码语言:javascript
复制
export const Signup = (props) => {
  const key= 'randomKey'
  const onTextChangeHandler = (text) => {
    console.log(key)
    setPayloadData[key] = text
    console.log(payload)
  }
  const [payload, setPayloadData] = useState({})
  return (
   <View>
    <TextInput  
          placeholder={placeHolder}
          number={number}
          style={[{color: defaultColor, borderColor: defaultColor}, styles.defaultTextInputStyle, templateStyle]}
          onChangeText={text => onTextChangeHandler(text)}
          value={payload[key]}
        />
  </View> 
)
}

这里,在上面的代码中,请注意

代码语言:javascript
复制
 const onTextChangeHandler = (text) => {
    console.log(key)
    setPayloadData[key] = text
    console.log(payload)
  }

这里的文本是我输入的任何内容。键的console.log正在返回randomKey,但是

代码语言:javascript
复制
console.log(payload)

是不确定的。有没有人能帮我找出我做错了什么?

EN

回答 3

Stack Overflow用户

发布于 2019-12-13 21:53:10

setPayload是一个函数,不是一个对象。您实际要做的是为函数分配一个新字段,payload保持不变,因为负责更新它的函数是,而不是被调用的

代码语言:javascript
复制
setPayloadData[key] = text; // the function object mutation occures

解决方案:只需将其作为函数调用并传递所需的参数:

代码语言:javascript
复制
setPayloadData({ [key]: text });
票数 1
EN

Stack Overflow用户

发布于 2020-05-04 07:28:12

示例:使用useState挂钩更新状态

相应地,更新属性值和特定组件

代码语言:javascript
复制
import React, { useState } from 'react';


const Signup = (props) => {
  const key= 'userKeyboardStrokes'
  const onTextChangeHandler = (event) => {
    setPayloadData({ [key]: event.target.value })
  }
  const [payload, setPayloadData] = useState({})

  return (
    <React.Fragment>
      <input  
            type="text"
              onChange={text => onTextChangeHandler(text)}
          />

    </React.Fragment> 
  )
}
module.exports = Signup;

输出结果:

代码语言:javascript
复制
{
  userKeyboardStrokes: "user input on object"
}

游乐场示例:https://stackblitz.com/edit/react-npytvn?file=testing.js

票数 0
EN

Stack Overflow用户

发布于 2019-12-13 21:53:18

setPayloadData是一个设置器,它应该是setPayloadData(newData)来更新状态。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59323889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档