使用 Redux 和 Immutable JS 存储记录元数据的位置
Where to store Record meta data with Redux and Immutable JS
几个月前我从 Ember 切换到 Redux + Immutable JS 项目,总体上很享受这种体验。
一个问题我仍然没有找到一个很好的解决方案,用于处理记录时存储该记录的元数据。
例如,假设我有一条 User
记录:
const userRecord = Immutable.Record({
id: null,
name: '',
email: ''
});
对于 User
,我可能还希望存储 isLoading
或 isSaved
等属性。第一个解决方案是将这些存储在 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
几个月前我从 Ember 切换到 Redux + Immutable JS 项目,总体上很享受这种体验。
一个问题我仍然没有找到一个很好的解决方案,用于处理记录时存储该记录的元数据。
例如,假设我有一条 User
记录:
const userRecord = Immutable.Record({
id: null,
name: '',
email: ''
});
对于 User
,我可能还希望存储 isLoading
或 isSaved
等属性。第一个解决方案是将这些存储在 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