hon*_*ute 2 reactjs react-native react-redux react-navigation
我正在尝试使用redux设置反应导航v3。在react navigation文档中,我可以成功设置导航,并且无需添加redux即可正常运行。但是,当我尝试添加我的redux class App extends React.Component{...}并连接我的操作时,它将引发以下错误:
永久违反:永久违反:在“ Connect(AuthScreen)”的上下文中找不到“ store”。将根组件包装在中,或者将自定义React上下文提供程序传递给connect选项中的Connect(AuthScreen)并将相应的React上下文使用者传递给Connect(AuthScreen)。
App.js
const MainNavigator = createBottomTabNavigator({
welcome: { screen: WelcomeScreen },
auth: { screen: AuthScreen },
main: {
screen: createBottomTabNavigator({
map: { screen: MapScreen },
deck: { screen: DeckScreen },
review: {
screen: createStackNavigator({
review: { screen: ReviewScreen },
settings: { screen: SettingsScreen }
})
}
})
}
});
const AppContainer = createAppContainer(MainNavigator);
class App extends React.Component {
render() {
return (
<Provider store={store}>
<AppContainer />
</Provider>
);
}
}
export default AppContainer;
Run Code Online (Sandbox Code Playgroud)
这是我要将Redux连接到的AuthScreen:
class AuthScreen extends Component {
componentDidMount(){
console.log('This is this.props in AuthScreen:')
console.log(this.props);
this.props.facebookLogin();
}
render(){
return(
<View>
<Text>AuthScreen</Text>
</View>
)
}
}
export default connect(null, actions)(AuthScreen);
Run Code Online (Sandbox Code Playgroud)
我怀疑我不允许<Provider>像这样将标签包装在应用容器周围,有人可以给出一些有关如何实现的见解吗?
So, I'll post what I have and hopefully it will help. I have a separated file (AppNavigation.js) that handles all the navigation for my app. On this AppNavigation I have this:
const RootNavigator = createStackNavigator({
<Code here>
})
Run Code Online (Sandbox Code Playgroud)
My RootNavigator is inside the AppContainer
const AppContainer = createAppContainer(RootNavigator)
Run Code Online (Sandbox Code Playgroud)
Then, on my class I render the AppContainer.
class AppNavigation extends Component {
constructor(props) {
super(props);
}
render() {
return <AppContainer screenProps={this.props} />
}
}
export default connect(mapStateToProps, mapDispatchToProps)(AppNavigation);
Run Code Online (Sandbox Code Playgroud)
Then, on my App.js I 'connect' my store to the RootNavigator
export default class App extends React.Component {
render() {
return (
<Provider store={store}>
<RootNavigator />
</Provider>
)
}
}
Run Code Online (Sandbox Code Playgroud)
So, long story short: you should wrap your MainNavigator on your Provider tag.
EDIT:
const rootReducer = combineReducers({
reducer1,
reducer2,
reducer3...,
})
export default createStore(
rootReducer,
undefined,
applyMiddleware(...middleware)
)
Run Code Online (Sandbox Code Playgroud)
So with these reducers you can 'connect' them to your component via mapStateToProps and use the state of the reducers on them.
这是一个简单的示例,可让您开始使用React Navigation 3.x和Redux:
App.js
import React, {Component} from 'react';
import {createStackNavigator, createAppContainer} from 'react-navigation';
import {Provider} from 'react-redux';
import {createStore, applyMiddleware} from 'redux';
import Reducers from './src/Reducers';
import Preload from './src/screens/Preload';
let store = createStore(Reducers);
const AppNavigator = createStackNavigator({
Preload: {
screen: Preload,
},
});
const AppContainer = createAppContainer(AppNavigator);
export default class App extends Component {
render () {
return (
<Provider store={store}>
<AppContainer/>
</Provider>
)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4208 次 |
| 最近记录: |