几个月前,我从 Ember 转到了 Redux + Immutable JS 项目,总体上很享受这种体验。
在使用 Records 时,我仍然没有找到一个很好的解决方案的一个问题是为该 Record 存储元数据。
例如,假设我有一个 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
关于redux - 使用 Redux 和 Immutable JS 存储记录元数据的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43349971/