【问题标题】:Can a redux immutable store contain a non immutable oneredux 不可变存储是否可以包含非不可变存储
【发布时间】:2025-12-29 13:25:12
【问题描述】:

我正在使用带有 immutablejs 的 redux。 我们想使用一个在内部使用 redux 但不使用 immutablejs 的插件。

  • 这就是我创建应用缩减程序的方式:
import { fromJS } from 'immutable';

import { combineReducers } from 'redux-immutable';
import { LOCATION_CHANGE } from 'react-router-redux';
import { reducer as formReducer } from 'redux-form/immutable';

// prebuilt admin-on-rest features
import { adminReducer, localeReducer } from 'admin-on-rest';

// Initial routing state
const routeInitialState = fromJS({
  location: null,
});

/**
 * Merge route into the global application state
 */
function routeReducer(state = routeInitialState, action) {
  switch (action.type) {
    /* istanbul ignore next */
    case LOCATION_CHANGE:
      return state.merge({
        location: action.payload,
      });
    default:
      return state;
  }
}

export default function createReducer(injectedReducers) {
  return combineReducers({
    route: routeReducer,
    admin: adminReducer, // <==== This reducer is not immutable
    // admin MUST be accessible using `(state) => state.admin` 
    // and NOT `(state) => state.get('admin')`
    locale: localeReducer(),
    form: formReducer,
    ...injectedReducers,
  });
}

这就是我创建商店的方式:

const store = createStore(
  createReducer(),
  fromJS({}),
  composeEnhancers(...enhancers)
);

只有管理存储不应该是不可变的。

admin 是否可以像在我们的 immutablejs 存储中一样插入该存储?

【问题讨论】:

    标签: javascript reactjs redux react-redux immutable.js


    【解决方案1】:

    是的,您可以在不可变对象(存储)中包含普通的 javascript 对象/数组,但您需要小心使用存储的方式。您将无法执行fromJS(store),因为这会使整个商店不可变。

    【讨论】:

    • 你会写一个自定义的combienReducers 吗?我试过了,效果不是很好。
    最近更新 更多