【问题标题】:Setting the initial state using next react redux wrapper使用 next react redux 包装器设置初始状态
【发布时间】:2019-06-26 20:49:41
【问题描述】:

我正在使用下一个 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;

【问题讨论】:

  • 你在哪里打电话makeStore
  • rootReducer 包含什么?帮助您在代码框中展示您的应用
  • 你好;你是如何使用 next-redux-wrapper 解决 next.js 特有的问题的?

标签: reactjs redux next.js


【解决方案1】:

我建议在您的单个减速器中设置初始状态,而不是在您的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 只是结合其他减速器,如下所示:

// 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;

【讨论】:

  • 我的问题是针对 next.js redux 包装器的。这也适用于它吗??
  • @UVic - 是的,它是一样的。您可以查看this example - 如果有帮助,我也可以将其添加到我的答案中
  • @UVic 你能先显示你的rootReducer 文件吗?如果你的 rootReducer 结合了其他减速器,你也可以展示它们吗?
猜你喜欢
  • 2021-03-10
  • 1970-01-01
  • 2016-09-22
  • 1970-01-01
  • 2016-10-15
  • 2021-06-04
  • 2020-11-02
  • 1970-01-01
  • 2020-04-12
相关资源
最近更新 更多