React Native:通过外部函数更改状态不会重新渲染

时间:2018-02-20 02:33:19

标签: javascript reactjs react-native

我已经根据需要创建了一个函数,只有当它与之前的值不相同时(即如果不相同则切换)。但是,它不会重新呈现组件。有人能让我知道我做错了什么吗?它确实改变了状态。

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进行检查

1 个答案:

答案 0 :(得分:2)

toggleState你没有调用setState并且直接改变状态,这是你永远不应该做的,也是没有触发重新渲染的原因:

thi_s.state[k] = new_v;

将其更改为

thi_s.setState({[k]: new_v});

此外,您应该考虑使用箭头函数或this而不是将toggleState传递给.bind(this),以便您可以在函数内部引用this将其作为论据传递。