React-Native Redux reducer switch 语句忽略类型
Posted
技术标签:
【中文标题】React-Native Redux reducer switch 语句忽略类型【英文标题】:React-Native Redux reducer switch statement ignores type 【发布时间】:2020-04-13 19:44:27 【问题描述】:这真的让我很困惑。我在我的 react-native 应用程序中创建了一个减速器和一个动作。但是 reducers 开关与类型不匹配,只是返回默认状态。 整个 store.js,我使用 redux-persist 将 redux 数据存储到 AsyncStorage 中:
import AsyncStorage from 'react-native';
import createStore, applyMiddleware from 'redux';
import createLogger from 'redux-logger';
import thunk from 'redux-thunk';
import persistStore, persistReducer from 'redux-persist';
import initAxios, configAxios from './axios';
import LOGIN, LOGOUT, LOGIN_ERROR from '../components/login/actions';
const initialState =
loggedIn: false,
token: '',
;
const globalReducer = (state = initialState, type, payload) =>
console.warn(type); // Logs: LOGIN
switch (type)
case LOGIN:
console.warn('update state'); // doesn't log
return ...state, loggedIn: true, token: payload;
case LOGOUT:
return ...state, loggedIn: false, token: '';
case LOGIN_ERROR:
return ...state, loginError: payload, loggedIn: false;
default:
console.warn('no state update'); // do logs
return state;
;
const persistConfig =
key: 'root',
storage: AsyncStorage,
whitelist: ['loggedIn', 'token'],
;
const persistedReducer = persistReducer(persistConfig, globalReducer);
const axiosInstance = initAxios();
export const store = createStore(
persistedReducer,
applyMiddleware(
createLogger(),
thunk.withExtraArgument(axios: axiosInstance),
),
);
configAxios(axiosInstance, store.dispatch);
export const persistor = persistStore(store);
以及被调度的动作:
export const loginUser = (login, password, navigate) => async (
dispatch,
_,
axios,
) =>
try
const response = await axios.post('/login',
login,
password,
);
if (!response.token)
throw new Error('Wrong login credentials');
dispatch(type: LOGIN, payload: response.token);
navigate();
catch (error)
console.error(error.message);
dispatch(type: LOGIN_ERROR, payload: error.message);
;
【问题讨论】:
只是const LOGIN = 'LOGIN';
我记得有完全相同的问题,但我忘了是什么导致她
可能有一些依赖?我在一些 github 问题中看到了这种情况。但它是我不使用的 react-router
不,它在你的代码中
我已经添加了整个商店创建文件,可能有一些我看不到的东西
【参考方案1】:
您不导出类型
export const LOGIN = 'LOGIN';
【讨论】:
以上是关于React-Native Redux reducer switch 语句忽略类型的主要内容,如果未能解决你的问题,请参考以下文章
如何在reducer中专门使用redux来获取react-native中的API?
路由器状态没有通过 redux 保持在 react-native
我在 react-native 和 redux 中处理 API 调用的地方