Javascript React redux使用不同的操作获取不同的状态内容
当我使用这个.props.history.push('login')访问URL和直接访问URL时,我的redux状态不同,如 这是我的Reducer.jsJavascript React redux使用不同的操作获取不同的状态内容,javascript,react-native,redux,react-redux,Javascript,React Native,Redux,React Redux,当我使用这个.props.history.push('login')访问URL和直接访问URL时,我的redux状态不同,如 这是我的Reducer.js const initialState = { userData: null }; function rootReducer(state = initialState, action) { if(action.type === "logout") { return initialState; } e
const initialState = {
userData: null
};
function rootReducer(state = initialState, action) {
if(action.type === "logout") {
return initialState;
} else if(action.type === "login"){
return Object.assign({}, state, {
userData: action.payload
});
}
return state;
};
export default rootReducer;
这是我的Action.js
function logout() {
return { type: "logout" }
}
function login(payload) {
return { type: "login", payload }
}
export {logout, login};
这是我的商店
import { createStore } from "redux";
import { persistStore, persistReducer } from 'redux-persist';
import storage from 'redux-persist/lib/storage'
import rootReducer from "./Reducer";
const persistConfig = {
key: 'root',
storage: storage,
}
const persistedReducer = persistReducer(persistConfig, rootReducer);
const store = createStore(persistedReducer);
const persistor = persistStore(store);
export { store, persistor };
当我登录时,我使用这个
store.dispatch(登录(userData))代码>
但是当我用这个得到redux州的时候
var loggedIn = store.getState().userData;
console.log(loggedIn)
当我使用不同的方法访问URL时,会得到不同的结果
当我使用这个.props.history.push('login')转到URL时,loggedIn变量将成为我的数据(这是正确的)
但是我通过在地址栏中粘贴URL来访问URL,loggedIn变量将变为null(这是错误的)
我不知道为什么会发生这种情况,因为我访问的是同一个URL,但结果不同
谢谢。当您重新加载页面(从URL栏)时,您正在重新加载JavaScript上下文。您的存储将被初始化,就像它是新的一样
当您在历史API中导航时,您将保留当前JavaScript执行上下文,并且存储将保留在内存中
我看到您试图将存储持久化到本地存储上,但是考虑到您的问题,存储的持久化或检索(可能两者)都失败了
查看说明,您应该将返回对象的函数导出为default
,如下所示:
export default () => {
let store = createStore(persistedReducer)
let persistor = persistStore(store)
return { store, persistor }
}
当您重新加载页面(从URL栏)时,您正在重新加载JavaScript上下文。您的存储将被初始化,就像它是新的一样
当您在历史API中导航时,您将保留当前JavaScript执行上下文,并且存储将保留在内存中
我看到您试图将存储持久化到本地存储上,但是考虑到您的问题,存储的持久化或检索(可能两者)都失败了
查看说明,您应该将返回对象的函数导出为default
,如下所示:
export default () => {
let store = createStore(persistedReducer)
let persistor = persistStore(store)
return { store, persistor }
}
export default () => {
let store = createStore(persistedReducer)
let persistor = persistStore(store)
return { store, persistor }
}