gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:35:52 30 4
gpt4 key购买 nike

几个月前,我从 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com