react native在connect(组件)的上下文中找不到存储



希望能给我一个提示,下面是我在react原生应用程序中的Redux实现:

我的app.js:只是在这个文件中设置我的存储,并像我的导师一样在Provider中包装我的容器。

import React from 'react';
import Welcome from './screens/Welcome';
import ShowCase from './screens/ShowCase';
import ProductDetails from './screens/ProductDetails';
import { createAppContainer } from 'react-navigation';
import { createStackNavigator } from 'react-navigation-stack';
import {createStore} from 'redux';
import {Provider} from 'react-redux';
import rootReducer from './Reducer';
const store = createStore(rootReducer);
const pushRouteOne = createStackNavigator({
page1: {
screen: Welcome
},
page2: {
screen: ShowCase
},
page3: {
screen: ProductDetails
}
}, {
initialRouteName: 'page1',
mode: 'modal',
headerMode: 'none'
})
const AppContainer = createAppContainer(pushRouteOne);
const App = () => {
return (
<Provider store={store}>
<AppContainer />
</Provider>
)
}
export default AppContainer; 

这是我的操作文件:我使用Axios从伪造的API中获取一些数据。

import {GET_BOOK} from './../Types/type';
import axios from 'axios';
const getBook = async (books) => {
const res = await axios.get('https://fakerestapi.azurewebsites.net/api/Books');
dispatch(getAsync(res.data));
return {
type: GET_BOOK,
payload: res
}
};
export default getBook;

这是我的reducer:我应该提到我合并了reducers,但我认为把代码放在这里没有用,但如果你需要检查一下,我会更新这个问题。

import {GET_BOOK} from '../Types/type';
const bookReducer = (state = null, action) => {
switch(action.type){
case GET_BOOK:
state = action.payload;
return {
data: state,
alert: false
};
default:
return state;
}
}
export default bookReducer;

这是我的欢迎页面,也是第一页:

import React, { useEffect } from 'react';
import {
StyleSheet,
View,
Text,
Image,
TouchableOpacity
} from 'react-native';
import getbook from './../Action/get_book';
import {connect} from 'react-redux';
import {bindActionCreator} from 'redux';

const Welcome = (props) => {
const navigationOptions = ({
navigation
}) => {
const {
params = {}
} = navigation.state;
}
return (
<View style={styles.screen}>
<View style={styles.img_container}>
<Image style={styles.shop_img} source={require('../Images/shopping.png')} />
</View>
<TouchableOpacity style={styles.btn_main} onPress={() => {
const { navigate } = props.navigation;
navigate('page2');
}}>
<Text style={styles.welc_text}>Get Started</Text>
</TouchableOpacity>
</View>
)
}
const mapStateToProps = state => {
return {
books : state.book
}
};
const mapDispatchToProps = dispatch =>
bindActionCreator({
Getbook : getbook
}, dispatch);
export default connect(mapStateToProps, mapDispatchToProps)(Welcome)

并且我遇到的错误是CCD_ 2。我在index.js文件中看到了一些建议使用Provider的答案,我也尝试过,但得到了相同的结果。任何帮助都将不胜感激。

代替export default AppContainer;

执行export default App;

您的代码有很多问题,将尝试汇总所有

  • App.js->我认为您正在使用redux-thunk进行副作用(api调用(,但您没有将thunk连接到您的商店
import thunk from 'redux-thunk';
import rootReducer from './reducers/index';
// Note: this API requires redux@>=3.1.0
const store = createStore(rootReducer, applyMiddleware(thunk));

文档中的更多信息https://github.com/reduxjs/redux-thunk

  • 我认为你的操作是正确的,但你的部分缺少一些代码
  • 你的减速器是正确的
  • 您的欢迎组件是功能组件,因此使用钩子而不是映射操作和道具
const Welcome = (props) => {
const navigationOptions = ({
navigation
}) => {
const {
params = {}
} = navigation.state;
}
//Dispatch actions
const dispatch = useDispatch();
const bookActions = bindActionCreators({
Getbook : getbook
}, dispatch);
// selector
const books = useSelector(state => state.books);

return (
<View style={styles.screen}>
<View style={styles.img_container}>
<Image style={styles.shop_img} source={require('../Images/shopping.png')} />
</View>
<TouchableOpacity style={styles.btn_main} onPress={() => {
const { navigate } = props.navigation;
navigate('page2');
}}>
<Text style={styles.welc_text}>Get Started</Text>
</TouchableOpacity>
</View>
)
}
export default Welcome;

最新更新