Redux容器呈现要传递哪些参数的集合?

Redux容器呈现要传递哪些参数的集合?,redux,Redux,我们正在使用React+Redux,它做得很好。但有一种情况我永远不知道该用哪种策略 当我需要在集合上循环时,我可以写: 传递元素 代码: 全部在一个文件中: 代码: render(){ collection.map(element=>{element.name}) } 解决方案#4不可重用,因此不太有趣 我不喜欢解决方案2,因为属性会淹没在其他属性中 我发现#3是最干净的,因为它的依赖性和转发道具较少。最大的折衷是,为每个元素项启动.find,感觉很蹩脚 所以我想这是第一个获胜的。但我觉

我们正在使用React+Redux,它做得很好。但有一种情况我永远不知道该用哪种策略

当我需要在集合上循环时,我可以写:

  • 传递元素
  • 代码:

  • 全部在一个文件中:
  • 代码:

    render(){
    collection.map(element=>
  • {element.name}

  • ) }
    • 解决方案#4不可重用,因此不太有趣
    • 我不喜欢解决方案2,因为属性会淹没在其他属性中
    • 我发现#3是最干净的,因为它的依赖性和转发道具较少。最大的折衷是,为每个
      元素项启动
      .find
      ,感觉很蹩脚
    所以我想这是第一个获胜的。但我觉得这不是redux做事的方式,是吗?如果我传递
    元素
    参数,为什么不传递更多?然后我们就失去了将容器与表示组件隔离的所有好处,不是吗?

    解决方案1和2都很好,因为在这种情况下,
    ElementItem
    是一个表示组件,从道具接收数据

    解决方案#3毫无意义,因为在集合上循环的组件已经获得状态的集合部分(或者因为此组件连接到Redux,或者因为它从props获得)

    在redux文档中,有一个显示Todo集合的示例:它们使用两个表示组件:
    Todo
    ,一个Todo项,和一个显示Todo的列表。还有一个容器组件,
    VisibleTodoList
    ,它从状态计算可见todo列表,并使用
    TodoList
    显示它们。当您想要在集合上循环时,可以使用相同的策略

    另一点:如果您不想使用
    find
    来获取正确的项目,您可以这样做,因此每个“收集表”都将项目存储在一个对象中,项目ID作为键。这样,您就可以获得如下所示的正确商品:

    const element = state.collection[elementId];
    

    您肯定需要添加一个键,以便
    collection.map(element=>)
    ,这是最好的“redux方式”:您拥有了解redux的最顶级容器和简单的表示组件
    ElementItem
    ,可以在需要时轻松测试和替换。谢谢。你说的
    键是对的,我忘在这里了。获取
    ElementItem
    ,但是如果我需要传递许多参数怎么办?他们都觉得很沉重。如果我对其他参数使用
    Connect
    ,这仍然有意义吗?回答很好,谢谢。为了避免散播无用的道具,我会选择1。我也会考虑归一化。
    render() {
      collection.map(element => <ElementItem key={element.id} {...element} />)
    }
    
    render() {
      collection.map(element => <ElementItem key={element.id} id={element.id} />)
    }
    
    connect((state, ownProps) => {
      element: state.collection.find(_el => _el.id === ownProps.id)
    })(ElementItem)
    
    render() {
      collection.map(element => <li key={element.id}><p>{element.name}</p></li>)
    }
    
    const element = state.collection[elementId];