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是键。这将覆盖我的其他现有状态。合并状态更新后,您无需担心状态的其他部分: