我的建议是不要在状态中存储冗余(派生的)信息。这意味着您不需要(也不应该!)将总数存储在状态中。这是一个问题的主要原因是,它给您的州提供了一个自相矛盾的机会……如果您州的
total密钥不等于项目总数的总和,那么您将有一个大问题!
相反,您可以创建一个计算总数的函数,并在需要时简单地调用它。例如:
const calculateTotal = state => { let total = state.cart.reduce((total, item) => { return total + item.quantity * item.product.price }, 0); // Assuming you just have one coupon, you could maintain a boolean in state if (state.hasCoupon) { total -= 50; } return total;}
然后,在代码中需要获取总数的任何位置,都可以简单地使用此函数。在中包含这种功能并不罕见
mapStateToProps:
const mapStateToProps = state => ({ total: calculateTotal(state);});
如果最终遇到很多派生状态,则使用诸如Reselect之类的选择器库可能会带来一些好处,该选择器库可以帮助您构建从其他选择器派生的选择器,并实现
备忘录 以提高性能。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)