javascript - react native : changing state via external function doesn't rerender

标签 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 检查它

最佳答案

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

thi_s.state[k] = new_v;

将其更改为

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

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

关于javascript - react native : changing state via external function doesn't rerender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48877015/

相关文章:

reactjs - 如果我不在 willReceiveProps 中使用 setState 会有什么问题吗?

javascript - 如何使文本流到下一行,并隐藏顶部?

javascript - 如何在Material-UI表格中显示动态数据?

React-Native无法读取null的属性 'bindings'

javascript - react /归零 : TypeError: Cannot read property 'target' of undefined

javascript - React 组件 ESLint 表示更喜欢默认导出

react-native - 单击 native react 时如何更改同一屏幕上的内容

javascript - 检查和设置表格行的可见性

javascript - 使用 scrolltop() 横向滚动和滚动

php - 用于位比较的二进制符号