javascript - 函数和无状态组件之间的区别?

标签 javascript reactjs

下面的两个示例显然产生了完全相同的代码。

示例 1(React 子项):

const Child = ({ item: { startedAt, count } }) => (
  <div>
    <div>{startedAt}</div>
    <div>{count}</div>
  </div>
)

const Parent = items => {
  return (
    <div>
      {items.map((item, index) => (
        <Child key={item.id} item={item} />
      ))}
    </div>
  )
}

export default Parent

示例 2(子函数):

const child = ({ id, startedAt, count }) => (
  <div key={id}>
    <div>{startedAt}</div>
    <div>{count}</div>
  </div>
)

const Parent = items => {
  return <div>{items.map(child)}</div>
}

export default Parent

为什么要使用示例 1,即 React 组件?与函数示例相比有什么好处吗?

最佳答案

实际上,这两段代码并不完全等价:

第一个示例是在每个渲染器中创建一个新的(不必要的)函数(items.map 中创建并返回 Child 元素的函数),它可以使垃圾收集器困惑。因此,第二个例子不仅更简洁,而且性能更好。因此,我个人会选择第二个示例。

此外,第二个示例不会嵌套对 React.createElement 的不必要调用。这意味着 map 函数将返回如下内容:

[
  React.createElement('div', {key: items[0].key},
    React.createElement('div', null, items[0].startedAt),
    React.createElement('div', null, items[0].count)
  ),
  React.createElement('div', {key: items[1].key},
    React.createElement('div', null, items[1].startedAt),
    React.createElement('div', null, items[1].count)
  ),
  ...
]

另一方面,第一个示例执行如下操作:

[
  React.createElement(Child, {key: items[0].key}, items[0]),
  React.createElement(Child, {key: items[1].key}, items[1]),
  ...
]

还值得指出的是,您的第二个示例的 child 函数实际上也是一个无状态功能组件。您是想直接调用函数来使用它还是通过 React.createElement 调用包装它取决于您,在这种情况下,我认为直接调用函数更有意义。

关于javascript - 函数和无状态组件之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52422639/

相关文章:

javascript - Vue.js 应用程序没有错误,但出现白页

javascript/omniture - 如何清除一个对象(对象)的所有属性

javascript - 动态导入在 netlify 中不起作用(reactjs)

javascript - 如何调整 react 表中的整个列边框

javascript - 如何根据数组中的最后一个索引隐藏元素?

javascript - 使用正则表达式替换字符串的一部分

javascript - 检测网页是否使用谷歌分析

javascript - 在同一次单击中创建并拖动

javascript - 如何在提交时将复杂的表单对象存储到 redux 状态?

javascript - HTTP 无法识别正文