React Native:在Component中调用Redux getState()

时间:2016-09-23 15:36:19

标签: react-native redux

我想要实现的目标是:我想检查NavigationDrawer是否已打开,如果是,那么当用户点击(在Android上)时,我想关闭抽屉而不是退出应用程序。我在Redux中存在一个布尔值(isDrawerOpen),它可以正确更新。

我的问题是,我无法弄清楚如何在我的组件中调用getState()。该组件看起来像这样:

class MainScreen extends Component {
  constructor(props) {
    super(props)

    BackAndroid.addEventListener('hardwareBackPress', function () {
      if (somehow.getState().isDrawerOpen) {
        // Close drawer.
        return true;
      } 

      return false;
    });
  }

  render() {
      return ...
  }
}

const mapStateToProps = (state) => {
  return {
    ...
  }
}

export default connect(mapStateToProps)(MainScreen)

商店是在另一个容器组件中创建的,如下所示:

export default class App extends Component {
    render() {
        return (
            <Provider store={store}>
                 <MainScreen />
            </Provider>
        );
    }
}

在我需要发送操作的MainScreen组件中,我通过调用this.props.dispatch(someAction())来执行此操作。但是,this.props.getState()似乎并不存在。

当然,一个解决方案是在触发mapStateToProps()时更新我的​​MainScreen状态,然后检查组件的状态,而不是检查Redux的状态。但是,更新我的组件状态会导致render()被触发,而这不是我想要的。此外,无论如何,我想知道如何从组件内部访问Redux的状态。

提前致谢!

1 个答案:

答案 0 :(得分:1)

你不应该将componentDidMount放在构造函数中,因为那里的道具不会改变。您需要将监听器放在componentWillMountprops中,以便能够检查this.props.isDrawerOpen的最新状态。然后在您的监听器内,检查connectmapStateToProps getState应自动传递并更新。connect var menuItem = $(".menu-item, .sub-menu");。您永远不必在top: 3em; ed组件中调用.menu-list