我想要实现的目标是:我想检查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的状态。
提前致谢!
答案 0 :(得分:1)
你不应该将componentDidMount
放在构造函数中,因为那里的道具不会改变。您需要将监听器放在componentWillMount
或props
中,以便能够检查this.props.isDrawerOpen
的最新状态。然后在您的监听器内,检查connect
,mapStateToProps
getState
应自动传递并更新。connect
var menuItem = $(".menu-item, .sub-menu");
。您永远不必在top: 3em;
ed组件中调用.menu-list
。