代码之家  ›  专栏  ›  技术社区  ›  Advena

在React中返回array.map()的最佳方法?

  •  0
  • Advena  · 技术社区  · 7 年前

    我有点新的反应,并遵循一些视频教程,我也在阅读一些关于它的书籍。(不超过2016年——因为变化很大)

    在我的旅程中,我通过了两种方法来执行React中的array.map()循环。

    一。在父组件内部执行映射循环,然后从子组件返回元素

    class ItemsList extends React.Component {
      render() {
        const items = this.props.items.map((item) =>(
          <Item
            id={item.id}
            title={item.title}
          />
      ));
        return (
          <div id='items'>
            {item}
          </div>
        );
      } //render
    }
    
    class Item extends React.Component {
      render() {
        return (
          <li key={this.props.id}>
              {this.props.title}
          </li>
        );
      } //render
    }
    

    2。在子组件内部执行映射循环并将整个组件返回到父组件

    class ItemsList extends React.Component {
      render() {      
          ));
            return (
              <div id='items'>
                <Item
                id={item.id}
                title={item.title}
                />
              </div>
            );
          } //render
    }
    
    class Item extends React.Component {
      render() {
        const item = this.props.items.map((item) =>(
          <li key={item.id}>
              {item}
          </li>
        ));
        return(item);
      }
    }
    

    如果我理解正确的话,React的优点之一就是它是一种更“团队友好”的方式来处理应用程序,因为每个人都可以一次处理一个组件,而不会真正干扰其他人的工作。

    但基于此,我会选择选项2,因为我们尽量少接触父组件,而更多地关注子组件。

    但我也相信选择选项1更明智,因为我们在父组件中拥有所有的数据和绑定,这使得它更结构化,子组件所需的绑定更少。

    很抱歉,如果我仍然缺少一些词汇表来更好地为有经验的React开发人员解释这一点,但我希望我已经明确了这一点。

    谢谢你花时间!

    2 回复  |  直到 7 年前
        1
  •  1
  •   ztadic91    7 年前

    因为react是基于组件的,所以应该将道具分组到它所属的组件。选项2没有多大意义,因为您有一个ItemList组件,它接受 列表 以及显然呈现和维护该列表。项目组件特定于 不应该知道其他的东西。此外,对于选项1,您将项目列表与实际项目分离。

    更好的方法是使用父组件呈现子项的集合。

        2
  •  1
  •   peetya    7 年前

    在我看来,Item组件应该尽可能独立于ItemList组件。我建议采用以下结构:

    项目列表组件:

    const ItemList = ({ items }) => (
        <div>
            {items.map(item => (
                <Item key={item.id} item={item} />
            ))}
        </div>
    );
    

    项目组件:

    const Item = ({ item }) => (
        <p>The ID of the item is {item.id}</p>
    );
    

    它看起来和你的第一种方法相似,除了 key 应该属于 ItemList 组件,我也会避免使用 <li> 标记使其可重用,但它实际上取决于您的用例。

    第二种方法在逻辑上是错误的,我同意@ztadic91所提到的,即Item组件不应该了解其他组件。