在我的ReactNative
应用程序中,我使用Redux
进行状态管理,并在App.js
中声明Provider
——请参阅下文。请注意,我已将App.js
从函数组件更改为类组件。
我的问题是如何访问App.js
中Redux
存储中的数据?当我尝试下面的代码时,我得到一个错误,上面写着:
在"Connect(App("的上下文中找不到"store">
这是App.js
代码:
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { store } from '../store';
// Components
import ComponentA from '../ComponentA';
import ComponentB from '../ComponentB';
class App extends Component {
render() {
return(
<Provider store={store}>
{
this.props.isAuthenticated ? <ComponentA /> : <ComponentB />
}
</Provider>
);
}
}
function mapStateToProps(state) {
return {
isAuthenticated: state.app.isAuthenticated
};
}
export default connect(mapStateToProps)(App);
这是反模式吗?感觉确实如此。在我嵌入App.js
的下一个组件中处理我的isAuthenticated
检查更好吗?
不建议在其他数据访问组件中编写提供程序,以这种方式编写代码是一种糟糕的做法。
请定义一个身份验证组件,并将其呈现在该应用程序组件中。
您可以通过从存储中调用getState方法来获取状态:
store.getState();
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { rootReducer } from '../store';
// Components
import ComponentA from '../ComponentA';
import ComponentB from '../ComponentB';
const store = createStore(rootReducer)
class App extends Component {
render() {
return(
<Provider store={store}>
{
this.props.isAuthenticated ? <ComponentA /> : <ComponentB />
}
</Provider>
);
}
}
function mapStateToProps(state) {
return {
isAuthenticated: state.app.isAuthenticatenter code hereed
};
}
export default connect(mapStateToProps)(App);