您好,我正在尝试通过一个字符串初始化按钮状态(setState),该字符串为您提供按钮的键(botones);
var stateButton = "button1-0"
实际状态:
我现在不如何在“ react state”上写“ state.botones [stateButton]:true”语法
答案 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);
);