[英]Redux-Saga error in React Native
我已經使用React Native創建了一個應用程序,並希望使用redux-saga從API獲取數據。
在配置Redux和Sagas之前,一切正常。
這是我添加和修改的:
ReactRestoRedux.js
import { createReducer, createActions } from 'reduxsauce' import Immutable from 'seamless-immutable' // Categories types const { Types, Creators } = createActions({ categories: null, categoriesSucceed: ['payload'], categoriesFailed: null }) export const ReactRestoTypes = Types export default Creators // Initial state export const INITIAL_STATE = Immutable({ payload: null, errorMessage: null, fetchCategories: false }) // Reducers export const categoriesRequest = (state) => state.merge({ fetchCategories: true }) export const categoriesRequestSucceed = (state, action) => { const { payload } = action return state.merge({ fetchCategories: false, errorMessage: null, payload}) } export const categoriesRequestFailed = (state) => state.merge({ fetchCategories: false, errorMessage: true}) export const reducer = createReducer(INITIAL_STATE, { [Types.CATEGORIES_REQUEST]: categoriesRequest, [Types.CATEGORIES_SUCCEED]: categoriesRequestSucceed, [Types.CATEGORIES_FAILED]: categoriesRequestFailed })
index.js(redux)
import { takeLatest, all } from 'redux-saga/effects' //import API from '../Services/Api' import FixtureAPI from '../Services/FixtureApi' import DebugConfig from '../Config/DebugConfig' import ZomatoAPI from '../Services/ZomatoAPI' /* ------------- Types ------------- */ import { StartupTypes } from '../Redux/StartupRedux' import { GithubTypes } from '../Redux/GithubRedux' import { ReactRestoTypes } from '../Redux/ReactRestoRedux' /* ------------- Sagas ------------- */ import { startup } from './StartupSagas' import { getUserAvatar } from './GithubSagas' import { getCategories } from './ReactRestoSagas' /* ------------- API ------------- */ // The API we use is only used from Sagas, so we create it here and pass along // to the sagas which need it. const api = DebugConfig.useFixtures ? FixtureAPI : ZomatoAPI.create() /* ------------- Connect Types To Sagas ------------- */ export default function * root () { yield all([ // some sagas only receive an action takeLatest(StartupTypes.STARTUP, startup), // some sagas receive extra parameters in addition to an action takeLatest(GithubTypes.USER_REQUEST, getUserAvatar, api), takeLatest(ReactRestoTypes.CATEGORIES_REQUEST, getCategories) ]) }
ReactRestoSagas.js
import { call, put } from 'redux-saga/effects' import { path } from 'ramda' import ReacRestoActions from '../Redux/ReactRestoRedux' import ReactRestoAPI from '../Services/ZomatoAPI' const api = ReactRestoAPI.create() export function* getCategories(){ const response = yield call(api.getCategories) if(response.ok){ //ok, call action from redux yield put(ReacRestoActions.categoriesSucceed(payload)) }else{ yield put(ReacRestoActions.categoriesFailed()) } }
index.js(傳奇)
import { takeLatest, all } from 'redux-saga/effects' //import API from '../Services/Api' import FixtureAPI from '../Services/FixtureApi' import DebugConfig from '../Config/DebugConfig' import ZomatoAPI from '../Services/ZomatoAPI' /* ------------- Types ------------- */ import { StartupTypes } from '../Redux/StartupRedux' import { GithubTypes } from '../Redux/GithubRedux' import { ReactRestoTypes } from '../Redux/ReactRestoRedux' /* ------------- Sagas ------------- */ import { startup } from './StartupSagas' import { getUserAvatar } from './GithubSagas' import { getCategories } from './ReactRestoSagas' /* ------------- API ------------- */ // The API we use is only used from Sagas, so we create it here and pass along // to the sagas which need it. const api = DebugConfig.useFixtures ? FixtureAPI : ZomatoAPI.create() /* ------------- Connect Types To Sagas ------------- */ export default function * root () { yield all([ // some sagas only receive an action takeLatest(StartupTypes.STARTUP, startup), // some sagas receive extra parameters in addition to an action takeLatest(GithubTypes.USER_REQUEST, getUserAvatar, api), takeLatest(ReactRestoTypes.CATEGORIES_REQUEST, getCategories) ]) }
我希望我能為此得到任何幫助,在這里呆了幾個小時
問題出在您的ReactRestoRedux.js
。
const { Types, Creators } = createActions({
categories: null,
categoriesSucceed: ['payload'],
categoriesFailed: null
})
與不符
export const reducer = createReducer(INITIAL_STATE, {
[Types.CATEGORIES_REQUEST]: categoriesRequest,
[Types.CATEGORIES_SUCCEED]: categoriesRequestSucceed,
[Types.CATEGORIES_FAILED]: categoriesRequestFailed
})
你必須修改categories
關鍵categoriesRequest
,如下圖所示
const { Types, Creators } = createActions({
categoriesRequest: null,
categoriesSucceed: ['payload'],
categoriesFailed: null
})
參考: https : //github.com/infinitered/reduxsauce#createactions
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.