我正在使用Redux,我的状态是一个标准化的,有很多不同的模型。现在我想知道自己是否有更好的具体行动,如:
{type: CHANGE_MODEL_NAME, modelId, name}
VS
{type: UPDATE_MODEL, modelId, {name}}
我做了一些搜索,我发现了这个问题:
Is it ok to create generic redux update action
现在我想知道的是,没有人认为具有特定的行动类型允许不同的减速器做出反应。以更清洁的方式采取行动。
IE:我有一个从另一个模型复制的模型,如下所示:
{
name: 'foo',
originalModel: id_0
}
如果我只想对名称更改操作做出反应,那么对复制模型的reducer中的特定操作做出反应会变得更容易。
2个减速器对同样的动作做出反应是不对的?这就是为什么没有人在原问题中解决这个问题?
答案 0 :(得分:1)
让多个切片缩减器响应相同的操作绝对是Redux的预期用例。我在帖子The Tao of Redux, Part 1 - Implementation and Intent中介绍了该背景。
至于您的具体问题:我认为对包含项目类型名称和项目ID的规范化数据进行更新操作是完全有效的。事实上,我在帖子Practical Redux, Part 7: Form Change Handling, Data Editing, and Feature Reducers中展示了这种确切的方法。
总体而言,Redux本身并不关心您拥有的具体操作类型以及它们的通用性。我们鼓励您定义适合您的应用的任何操作,以及它们所代表的“抽象”级别。让它们更通用是非常合理的 - 例如,我更喜欢UPDATE_USER_ATTRIBUTES
而不是SET_USER_FIRST_NAME
和SET_USER_LAST_NAME
,但最终取决于你。
答案 1 :(得分:1)
这完全有效。这种模式甚至有一个名字。 “应用更改集”
您的消息将变为以下内容:
{type: APPLY_CHANGSET, data: {id: idOfThingToApplyTo, propOne: '1', propTwo: '2'}}
你的减速器可以是这样的:
const propOneReducer = (value = 'default', {type, {data: {propOne}}) => {
return type === APPLY_CHANGSET && propOne !== undefined ? propOne : value;
}
这使得向商店中的对象添加新属性(属性)变得更加容易。添加reducer,并将您的react视图中的数据发送到actionCreator。在简单的情况下,您甚至可能不需要更改actionCreator。
在这些简单的情况下,您甚至可以构建一个reducer创建器,基本上为您创建reducer。
Pro的
Not Pro's