不久前,我们开始了第一个基于Web的单页应用程序。我们从React和Flux(Facebook实施)开始,但是最近改用Reflux进行Flux实施。尽管Fb Flux实现了解“命名”商店事件的概念,但Reflux中不提供此概念。结果,侦听商店的每个组件总是对所有事件做出反应。下面是显示我们用户界面复杂性的参考图像。
如您所见,我们有很多重复的组件(具有相同信息种类的多个选项卡,具有客户详细信息的多个组件以及具有详细信息的多个收货清单(甚至嵌套)。
此应用程序是用于维护所有数据(已打开的发票等)的现有.Net应用程序的新前端(UI)。Web应用程序可以使用Web服务(MVC Web API 2)与该后端进行通信。
给定如图所示的用户界面,我想知道我是否更适合于每个包含所有发票数据的发票的商店(具有引用所有发票数据的聚合商店),还是适合每个包含发票数据的商店。仅发票标题信息和其他一些存储每个详细信息窗格信息的存储。
预先感谢您的反应和建议!
编辑:我误读了您的问题,似乎您想要一个反流答案,而我只给出了一个React答案。无论如何,我都会继续做下去,以备将来参考。
我要做的方法是一个存储发票阵列的单一商店。因此,我将使服务器API输出如下所示:
[
{
invoice_no: 1,
delivery: {
// delivery details
},
customer: {
// customer details
}
products: [
{
product_no: 1,
product_details: {
...
}
},
{
product_no: 5,
product_details: {
...
}
}
]
},
{
invoice_no: 2,
...
}
]
然后将其存储在<App>
组件的状态中。我的React代码大致如下所示:
var App = React.createClass({
getInitialState: function() {
return { invoices: [] };
},
onComponentDidMount: function() {
// make an ajax call to server to get
// invoices data. Then on success:
// this.setState({ invoices: data });
},
render: function() {
<div>
<InvoiceTabs invoices={this.state.invoices} />
</div>
}
});
// Everything here on out is just using props, so it's immutable data.
var InvoiceTabs = React.createClass({
render: function() {
var InvoiceComponents = this.props.invoices.map(function(invoice) {
return (
<Invoice invoice={invoice} />
);
});
}
});
var Invoice = React.createClass({
render: function() {
var invoice = this.props.invoice;
return (
<li>
<ProductsList products={invoice.products} />
<DeliveryInfo delivery={invoice.delivery} />
<InvoiceCalculator />
</li>
)
}
});
// various other components
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句