【发布时间】:2021-10-26 16:15:59
【问题描述】:
使用显式 documentations,我使用 redux 工具包库提供的 createSlice() 方法构建了一个“home”reducer,然后使用异步 API 调用来获取存储到 redux 状态的提议,使用 createAsyncThunk 方法。这是减速器的以下代码
import {createAsyncThunk, createSlice, PayloadAction} from '@reduxjs/toolkit';
import testService from '../../api/services/test.service';
const getOffers = createAsyncThunk(
'home/getOffersStatus', //I tried changing the type string but to no avail
async (thunkAPI) => {
const res = await testService.getOffers();
return res.data;
},
);
const home = createSlice({
name: 'home',
initialState: {
offers: {
loader: false,
data: null,
err: null,
},
},
reducers: {},
extraReducers: builder => {
builder.addCase(getOffers.fulfilled, (state, action) => {
state.offers.data = action.payload
});
},
});
export default home.reducer;
接下来我在home.js 中调用了getOffers() 方法。如下图:
import React, {useEffect} from 'react';
import {ScrollView, Text, View} from 'react-native';
import {Button, Icon} from 'react-native-elements';
import {useTheme, withTheme} from 'react-native-paper';
import {useDispatch} from 'react-redux';
import {GlobalStyles} from '../../constants/globalStyles';
const Home = ({navigation}) => {
const theme = useTheme();
const dispatch = useDispatch();
useEffect(() => {
dispatch(getOffers()); // <------- Problem Occurs Here
}, []);
return (
<ScrollView
style={GlobalStyles.bgScrollView}
contentContainerStyle={(GlobalStyles.flex1, GlobalStyles.flexGrow)}>
<View
style={{flex: 1, margin: 40, marginTop: '30%', alignItems: 'center'}}>
<Text textAlign="center">{'This is Home Screen'}</Text>
<Button
buttonStyle={GlobalStyles.buttonPrimary}
title="Redeem Offer Screen >"
onPress={() => {
navigation.push('Redeem Offer');
}}
/>
</View>
</ScrollView>
);
};
export default withTheme(Home);
现在,当我调用调度时,我收到以下错误:
Uncaught ReferenceError: getOffers is not defined at home.js:13
我做错了什么?
【问题讨论】:
-
您是否有机会将商店导入到代码库中的其他文件中?
标签: reactjs react-native redux redux-toolkit