reactjs - 使用下一个react redux包装器设置初始状态

标签 reactjs redux next.js

我正在使用下一个react-redux包。如何设置初始状态?文档仅指出 withRedux 函数仅接受 makeStore 函数作为参数。在 makeStore 函数中设置初始状态的默认值不起作用。

import {createStore} from "redux";
import rootReducer from './reducers';

/**
* @param {object} initialState
* @param {boolean} options.isServer indicates whether it is a server side or client side
* @param {Request} options.req NodeJS Request object (not set when client applies initialState from server)
* @param {Request} options.res NodeJS Request object (not set when client applies initialState from server)
* @param {boolean} options.debug User-defined debug mode param
* @param {string} options.storeKey This key will be used to preserve store in global namespace for safe HMR 
*/
const makeStore = (initialState={hello: "world"}, options) => {
    return createStore(rootReducer, initialState);
};

export default makeStore;
import { combineReducers } from 'redux';
import sessionReducer from './session';
import userReducer from './user';

const rootReducer = combineReducers({
  sessionState: sessionReducer,
  userState: userReducer,
});

export default rootReducer;

最佳答案

我建议在您的各个 reducer 中设置初始状态,而不是在您的createStore函数中。尝试在各个 reducer 本身中设置初始状态,如下所示:

// auth reducer
import * as actionTypes from '../actions/actionTypes';

// INITIAL STATE!
const initState = {
    authError: null,
};

// PASS INITIAL STATE INTO YOUR REDUCER!
const authReducer = (state = initState, action) => {
    switch(action.type) {
        // example actionType
        case actionTypes.LOGIN_SUCCESS: return {...state, authError: null };
        case actionTypes.LOGIN_ERROR: return {...state, authError: 'oops, error!' };
    default: return state;
}

export default authReducer;

我假设您的 rootReducer 只是组合其他 reducer ,如下所示:

// example root reducer
import authReducer from './authReducer';
import projectReducer from './projectReducer';
import { combineReducers } from 'redux';

const rootReducer = combineReducers({
    auth: authReducer,
    project: projectReducer,
});

export default rootReducer;

关于reactjs - 使用下一个react redux包装器设置初始状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54493681/

相关文章:

javascript - 如何结合使用 connect() 的两种用法?

javascript - 在 reactjs 和 nextjs 构造函数中获取引用错误 : localstorage is not defined

javascript - Vercel next.js 环境变量不起作用

javascript - 在 React 组件内渲染 React 元素

javascript - React Native - 创建形状的 flex 边缘

reactjs - 在 react 中使用 <Link> 将对象数组传递给另一个组件

angular - 解决 Action 创建者中的异步函数

reactjs - NGINX 和 React :net::ERR_ABORTED 404

javascript - 将鼠标悬停在 React 中,将永久类添加到 DOM 节点

authentication - Next-auth 在部署的 Vercel 应用程序中尝试登录后接收 404