【发布时间】:2021-05-29 17:57:03
【问题描述】:
我正在尝试使用 expo 将 redux 商店添加到我的 react-native 应用程序中。
应用程序如下所示:
import React from 'react';
// Persistent storage
import AsyncStorage from '@react-native-async-storage/async-storage';
// Navigation
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import Login from './Login';
import Home from './Home';
import BoardScreen from './BoardScreen';
import BoardDetailsScreen from './BoardDetailsScreen';
import CardDetailsScreen from './CardDetailsScreen';
// Store
import { Provider } from 'react-redux';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import store from './store/store';
import { setNCServer, setToken } from './store/actions';
// For creating an URL handler to retrieve the device token
import * as Linking from 'expo-linking';
// Create Stack navigator
const Stack = createStackNavigator()
// Application
class App extends React.Component {
constructor(props) {
super(props)
// Retrieve token from storage if available
AsyncStorage.getItem('token').then(token => {
this.props.state.setToken(token)
})
// Register handler to catch Nextcloud's redirect after successfull login
Linking.addEventListener('url', (url) => {this.handleRedirect(url)})
}
// Function to retrieve the device's token and save it after user logged in
handleRedirect = async (url) => {
if (url.url.startsWith('nc://login/server')) {
try {
token = url.url.substring(url.url.lastIndexOf(':'))
console.log('Persisting token', token)
AsyncStorage.setItem('token', token);
this.props.state.setToken(token)
} catch (e) {
// TODO
}
}
}
render() {
if (this.state.token === null) {
// No token is stored yet, we need to get one
return (
<Provider store={store}>
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="Home" component={Home} />
<Stack.Screen name="Login" component={Login} />
</Stack.Navigator>
</NavigationContainer>
</Provider>
)
} else {
return (
<Provider store={store}>
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="AllBoard" component={BoardScreen} options={{title: 'All boards'}} />
<Stack.Screen name="BoardDetails" component={BoardDetailsScreen} options={{title: 'Board details'}} />
<Stack.Screen name="CardDetails" component={CardDetailsScreen} options={{title: 'Card details'}} />
</Stack.Navigator>
</NavigationContainer>
</Provider>
)
}
}
}
// Initialise store
const mapDispatchToProps = dispatch => (
bindActionCreators({
setNCServer,
setToken,
}, dispatch)
);
const mapStateToProps = (state) => {
return state
};
const connector = connect(mapStateToProps, mapDispatchToProps)
export default connector(App);
问题:当我启动应用程序时,我收到了臭名昭著的错误“错误:在“Connect(App)”的上下文中找不到“store”。
我在这个问题上绞尽脑汁了好几个小时,却找不到我做错了什么。
谁能帮帮我?
【问题讨论】:
标签: reactjs react-native redux expo react-navigation