javascript - React-Native:状态已更改,但返回旧值

标签 javascript reactjs react-native activity-lifecycle

我有两个组件。 ComponentA 上有一个按钮,当你点击它时,它会改变状态:

import ComponentB from './ComponentB'
.
.
constructor(props) {
    super(props);
    this.state = {
        filter: true,
    };
}
.
.
.
<TouchableOpacity
    onPress={()=>{ this.setState({filter: !this.state.filter }); }}
>
    {this.state.filter ?
        <Text>Enabled</Text> :
        <Text>Disabled</Text>
    }
</TouchableOpacity>
.
.
.
<ComponentB filter={this.state.filter} />

ComponentB

render(){
    return(
      <View><Text>{this.props.filter}</Text></View>
    );
}

有趣的是,当您单击按钮时,状态确实会发生变化,并且基于状态的文本也会发生变化。所以第一次它从 True 变为 False。但 ComponentB 仍然会收到 True 而不是 False。 当您再次点击它时,状态从 False 变为 True,文本也正确显示,但这次 ComponentB 将收到 True而不是 False。 我将 props 传递给 ComponentB 是否错误?我错过了什么吗?

提前致谢。

最佳答案

将 setState 移出 View ;

import ComponentB from './ComponentB'
.
.
constructor(props) {
    super(props);
    this.state = {
        filter: true,
    };
}
changeFilter = () => { this.setState({filter: !this.state.filter }); };
.
.
.
<TouchableOpacity
    onPress={()=> this.changeFilter(); }
>
    {this.state.filter ?
        <Text>Enabled</Text> :
        <Text>Disabled</Text>
    }
</TouchableOpacity>
.
.
.
<ComponentB filter={this.state.filter} />

关于javascript - React-Native:状态已更改,但返回旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41722030/

相关文章:

javascript - 如果键保持不变,但其他值发生变化,如何重新渲染?

php - 为什么 fetch POST 在 React 中返回待处理的 API 调用

android - 如何为 React Native 定义全局 gradle 路径

react-native - 背面的确认/警告对话框

javascript - 如何在 Jest 测试中模拟影子元素

javascript - 当我向下还原页面时,很少有 <div> 元素移动

javascript - 表单的输入默认文本

javascript - AngularJS 将两个列表合二为一

javascript - 无法从通过调用 asyncStorage 函数返回值的异步函数获取值

javascript - 如何使用具有父子关系的 JSON 数据创建带复选框的树?