我仍的一个问题还没有找到一个很好的解决方案,当使用Records时,存储该记录的元数据。
例如,我们说我有一个bar
记录:
User
对于const userRecord = Immutable.Record({
id: null,
name: '',
email: ''
});
,我可能还希望存储User
或isLoading
等属性。第一种解决方案是将这些存储在isSaved
中。虽然到目前为止这是最简单的解决方案,但这对我来说是错误的。
另一种解决方案可能是创建一个userRecord
地图,其中包含User
记录,以及有关用户的元数据。
实施例。
User
我认为这更优雅,但我不喜欢所有用户属性如何变得更加嵌套,因此访问用户属性变得非常冗长。
我最想念的是Ember能够轻松访问Model属性。
实施例。 const userMap = Immutable.Map({
record: Immutable.Record({
id: null,
name: '',
email: ''
}),
isLoading: false,
isSaved: true
});
或user.get('isSaved')
是否可以使用Redux和Immutable重新创建类似的东西?你以前怎么接近这种情况?
答案 0 :(得分:3)
我可能误解了这个问题,因为
我最想念的是Ember能够轻松访问Model属性。
user.get('isSaved')或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