我正在尝试解决“简单”的反应/通量架构,我需要一些建议。基本上我想深入研究最佳实践和助焊剂实施。
我确实在react.js中实现了简单的状态完整形式。
我的表单的基本结构接近
<Form>
<Input name="foo" value={this.name} onChange=... />
{items.map (i) => <Item model={i} onChange=... onRemove=... />}
<Input name="sum" value={this.sum} onChange=... />
</Form>
状态类似于
{ name: "Bar Baz", items: List.of(new ItemRecord(...)), sum: 10 }
状态的 sum
属性是从items
列表计算的。
注意:形式/状态都是简化的,在现实生活中大约有20个输入字段。
目前,我的顶级组件<Form>
存储每个输入/子组件的当前状态。您可以看到我向onChange
组件提供了<Item>
属性,如果用户更改<Item>
组件,则会调用onChange
回调,并更新ItemRecord
, sum是重新计算的,并且在Immutability Helpers的帮助下设置了新状态。
我希望你能了解它目前是如何运作的。
编辑:我忘了提及,<Item>
组件是无状态的,只需使用其他信息调用parent.onChange
。
我想知道这是否是表单上的好方法,因为我目前正在考虑基于Flux
架构的一些不同的东西。
我将<Form>
组件的状态移到之外的FormStore
。状态(或其一部分)将表示为FormRecord
(Immutable.js记录)。现在,ItemRecord
也应该被提取到ItemStore
中。另外,我有一些方法,例如getStateFromStore()
将数据连接在一起并设置为<Form>
的状态。
我应该如何处理<Form>
输入的更改?我应该在商店中调用Input.onChange
一些操作,这会更新FormRecord
吗?一旦更新,它将触发一些事件<Form>
组件侦听,它将根据getStateFromStore()
设置当前状态?
我想,我也应该使用ItemStore
做类似的事情。
您如何看待这种形式实施的好方法是什么?或者我应该采用无状态方式(但是我希望在将来实时更新sum
并进行一些实时验证)并在表单提交时解析状态?
当用户输入时,性能如何不会变得迟钝?
感谢您的时间。
PS:对不起我的英语,我希望你能理解这一点。
答案 0 :(得分:2)
听起来你正走在正确的轨道上。项目应更新商店中的状态。然后商店将状态作为道具传递给Form。表格将每个道具传递给物品。拥有一个Form存储是有意义的。这是单向数据流&#34;。
不,输入不是迟钝的。我们在Google文档的复杂程度上完成了一个复杂的Web应用程序,并且性能非常高。此外,它很容易推理。这就是React的重点。