redux - 使用 Redux 和 Immutable JS 存储记录元数据的位置

标签 redux react-redux immutable.js

几个月前,我从 Ember 转到了 Redux + Immutable JS 项目,总体上很享受这种体验。

在使用 Records 时,我仍然没有找到一个很好的解决方案的一个问题是为该 Record 存储元数据。

例如,假设我有一个 User 记录:

const userRecord = Immutable.Record({
    id: null,
    name: '',
    email: ''
});

对于 User,我可能还希望存储 isLoadingisSaved 等属性。第一个解决方案是将这些存储在 userRecord 中。虽然这是迄今为止最简单的解决方案,但我觉得这是错误的。

另一种解决方案可能是创建一个 User 映射,其中包含 User 记录以及有关用户的元数据。

例。

const userMap = Immutable.Map({
    record: Immutable.Record({
        id: null,
        name: '',
        email: ''
    }),
    isLoading: false,
    isSaved: true
});

我认为这更优雅,但我不喜欢所有用户属性嵌套得更深,因此访问用户属性变得非常冗长。

我最想念 Ember 的是能够轻松访问模型属性。

例。 user.get('isSaved')user.get('name')

是否可以使用 Redux 和 Immutable 重新创建类似的东西?您以前是如何处理这种情况的?

最佳答案

我可能误解了这个问题,因为

What I miss most about Ember is being able to access Model properties easily.

user.get('isSaved') or user.get('name')

确实适用于不可变记录。

如果您不想向记录添加太多属性,您可以拥有一个状态属性并添加一些 getter(假设您的状态是互斥的):

const STATUS = {
  INITIAL: 'INITIAL',
  LOADING: 'LOADING',
  SAVING: 'SAVING
};

class UserRecord extends Immutable.Record({
  id: null, 
  name: '', 
  email: '', 
  status: STATUS.INITIAL}) {

  isLoading() {
    return this.get('status') === STATUS.LOADING;
  }

  isSaving() {
    return this.get('status') === STATUS.SAVING;
  }
}

new UserRecord().isLoading());  // returns false

new UserRecord({status: STATUS.LOADING}).isLoading();  // returns true
new UserRecord().set('status', STATUS.LOADING).isLoading();  // returns true

关于redux - 使用 Redux 和 Immutable JS 存储记录元数据的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43349971/

相关文章:

javascript - 如何将状态重置为初始状态?

reactjs - 'TypeError [ERR_INVALID_ARG_TYPE] : The "path" argument must be of type string. 接收类型未定义'

reactjs - 为什么我无法通过 firebase 进行身份验证?

reactjs - 如何在 React Native 应用程序启动时组合多个任务

javascript - 映射关联数组的值

javascript - 查看是否显示了 React 组件

javascript - 如何使用 defaultProps 在 React redux 组件的流程中声明类型?

react-native - React Native - "You are currently using minified code outside of NODE_ENV === "生产""

javascript - 在 es6 中创建多维映射数组

javascript - Immutable.js 将值映射到数组