我已经根据需要创建了一个函数,只有当它与之前的值不相同时(即如果不相同则切换)。但是,它不会重新呈现组件。有人能让我知道我做错了什么吗?它确实改变了状态。
export function toggleState(thi_s, k, new_v)
{
if(thi_s.state[k]!=new_v)
{
thi_s.state[k] = new_v;
return true;
}
return false;
}
。
[使用方法]
if(this.state.xyz!=true) this.setState({xyz:true}); //does rerender as expected
toggleState(this, 'xyz', true); //doesn't rerenders
状态在没有重新发送的情况下更改,我可以在通话后立即使用console.log
进行检查
答案 0 :(得分:2)
在toggleState
你没有调用setState
并且直接改变状态,这是你永远不应该做的,也是没有触发重新渲染的原因:
thi_s.state[k] = new_v;
将其更改为
thi_s.setState({[k]: new_v});
此外,您应该考虑使用箭头函数或this
而不是将toggleState
传递给.bind(this)
,以便您可以在函数内部引用this
将其作为论据传递。