Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用正则表达式设置状态_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript 使用正则表达式设置状态

Javascript 使用正则表达式设置状态,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我用计算机的方式将我的状态设置为 this.setState({ chat-[`${id}`]: some_id }) 但问题是我没有id将其设置为false,我可以用setState执行regex吗?我想在componentWillMount中将chat-*设置为false。这可能对您有用: // newState obj let newState = {}; // iterate over object keys, finding matching 'chat-*' keys

我用计算机的方式将我的状态设置为

this.setState({ chat-[`${id}`]: some_id })

但问题是我没有id将其设置为false,我可以用setState执行regex吗?我想在componentWillMount中将chat-*设置为false。

这可能对您有用:

// newState obj     
let newState = {};

// iterate over object keys, finding matching 'chat-*' keys
Object.keys(this.state).forEach((key) => {
   if (key.startsWith('chat-')) {
    newState[key] = false; // set it to false
  }
});

this.setState(newState);  // update state

请注意,您的新闻状态会自动合并到旧状态:

您可以使用循环更新状态对象,然后像

 handleClick() {
           var obj = {...this.state};
           for(var key in obj) {
              if(/count-*/g.test(key))
                  obj[key] = 1;
           }
           console.log(obj)
           this.setState({...obj})
        }
片段:

类应用程序扩展了React.Component{
状态={
“计数-0”:0,
“计数-1”:0
}
handleClick(){
var obj={…this.state};
for(obj中的var键){
如果(/count-*/g.test(键))
obj[key]=1;
}
控制台日志(obj)
this.setState({…obj})
}
render(){
返回(
{this.state['count-0']}
{this.state['count-1']}
this.handleClick()}>增加
)
}
}
ReactDOM.render(,document.getElementById('app'))


那么您想将所有以
聊天-
开头的属性设置为相同的值吗?@Aron正确,将其设置为false。为什么不创建一个数组?然后,当您需要更新特定状态时,您可以只
this.state.chat[index]=newValue
,然后只需再次分配状态
this.setState({chat})
如果要在状态中存储任意数量的变量,我想您需要以不同的方式存储它,无论是作为数组还是作为对象,其中
id
s是键。这将覆盖我的其他现有状态。合并状态更新后,您无需担心状态的其他部分: