我有一个大的 json数据集用于产品,我称之为产品的真相来源。使用一些过滤,我必须过滤此数据集并返回与过滤器匹配的产品的子集。我可以使用不同的过滤器,它应该从真实来源返回一个子集。过滤器可以是(1)标题(2)产品中具有关键字“javascript”且价格大于10美元的产品。我还可以为这个事实来源添加一个新产品。我可以再次应用过滤器,新添加的产品可能会返回结果子集。
我看到的所有reducer示例都返回了之前状态的状态。因此,在我的情况下,如果我遵循减速器原则,我可以对产品来源应用过滤器并获得新状态。现在如果我应用另一个过滤器,我只能在新状态而不是真实来源上应用它。因此,过滤器在已过滤的产品状态上完成。
我希望过滤器适用于原始/主产品的真相来源。我不希望过滤器应用于已经过滤的状态。
有人可以帮忙吗?
答案 0 :(得分:1)
你能创建一个名为fullData的状态来保存整个大型JSON数据集吗?然后你的过滤器可以调用一个动作来调度fullData的子集作为filteredData(一个单独的状态)吗?然后,您可以创建一个函数,如果filteredData不存在则呈现fullData,否则呈现filteredData。这可能不是最优雅的解决方案,但我认为它会起作用。
制作'类型'也许叫做FILTER_RESULTS。然后在动作创建者文件中创建一个动作:
export function filterResults(fullData) {
// javascript here to filter results
return {
type: FILTER_RESULTS,
payload: <variable containing filtered results>
};
}
然后你的reducer会有一个switch语句,它会将action.payload返回到filteredData状态。
您的操作会执行过滤,将过滤后的结果传递给reducer,而mapStateToProps允许组件访问您的状态。看这里:https://github.com/joshuaslate/mern-starter
答案 1 :(得分:1)
如果要在component
本身的客户端进行数据,则应实施过滤数据的逻辑,因为它是"transient state"
。
假设您有一个Container
组件,其中包含数据并呈现以下组件:
Filter
组件 - 渲染过滤器部分,我们选择此类过滤器。WorkspaceView
组件 - 使用数据呈现实际视图,我们在其中查看数据。
然后,您的Container
组件会根据filters
组件发送的Filter
过滤数据,并将数据传递给WorkspaceView
我不认为Redux
应该用于{&#34;临时&#34;}状态,只应在数据从后端或其他东西提供的情况下使用。