动态设置状态以修改对象值

时间:2020-05-20 19:18:16

标签: javascript reactjs state

您好,我正在尝试通过一个字符串初始化按钮状态(setState),该字符串为您提供按钮的键(botones);

var stateButton = "button1-0"

enter image description here

实际状态:

enter image description here

我现在不如何在“ react state”上写“ state.botones [stateButton]:true”语法

4 个答案:

答案 0 :(得分:3)

您将要复制botones对象,例如,spread

setState({
  ...state,
  botones: {
    ...state.botones,
    [stateButton]: true
  }
})

如果您使用的是类组件而不是useState钩子,则只需指定botones,因为React将合并状态键:

this.setState({
  botones: {
    ...this.state.botones,
    [stateButton]: true
  }
})

答案 1 :(得分:0)

您不应修改状态对象,因为必须将其视为不可变的。您需要做的是定义一个新对象,该对象包含与现有对象相同的内容,但只更改该按钮值。

检查:https://reactjs.org/docs/react-component.html#state

请不要直接更改this.state,因为之后调用setState()可能会替换您所做的更改。将this.state视为不可变。

答案 2 :(得分:0)

let message = "she sells seashells"
var letterArray = message.map { String($0)}
var error = false

while error == false {
    if message.contains("sh") {
        guard let locate1 = letterArray.firstIndex(of: "s") else{
            error = true
            break }
        let locate2 = locate1 + 1
        //since it keeps finding an s it doesn't know how to move on to rest of string and we get an infinite loop
        if letterArray[locate2] == "h"{
            letterArray.insert("sh", at: locate1)
            letterArray.remove (at: locate1 + 1)
            letterArray.remove (at: locate2)}}
    else { error = true }}
print (message, letterArray)

我相信这应该有效

答案 3 :(得分:0)

嗨,您不应该更改状态对象。相反,您应该将setState与prevState一起使用

constructor(props){
   super(props);
   this.state = {
      user: {}
   }
}

this.setState((prevState) => {
     const updatedUser = {...prevState.user, [target.name]: target.value};
     return { user: updatedUser }; 
   }, () => this.doSomething(this.state.user);
);

Source