返回部分状态

时间:2016-05-23 16:24:40

标签: redux react-redux

我有一个大的 json数据集用于产品,我称之为产品的真相来源。使用一些过滤,我必须过滤此数据集并返回与过滤器匹配的产品的子集。我可以使用不同的过滤器,它应该从真实来源返回一个子集。过滤器可以是(1)标题(2)产品中具有关键字“javascript”且价格大于10美元的产品。我还可以为这个事实来源添加一个新产品。我可以再次应用过滤器,新添加的产品可能会返回结果子集。

我看到的所有reducer示例都返回了之前状态的状态。因此,在我的情况下,如果我遵循减速器原则,我可以对产品来源应用过滤器并获得新状态。现在如果我应用另一个过滤器,我只能在新状态而不是真实来源上应用它。因此,过滤器在已过滤的产品状态上完成。

我希望过滤器适用于原始/主产品的真相来源。我不希望过滤器应用于已经过滤的状态。

有人可以帮忙吗?

2 个答案:

答案 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组件,其中包含数据并呈现以下组件:

  1. Filter组件 - 渲染过滤器部分,我们选择此类过滤器。
  2. WorkspaceView组件 - 使用数据呈现实际视图,我们在其中查看数据。

  3. 然后,您的Container组件会根据filters组件发送的Filter过滤数据,并将数据传递给WorkspaceView

    我不认为Redux应该用于{&#34;临时&#34;}状态,只应在数据从后端或其他东西提供的情况下使用。