当前位置: 首页 > 面试题库 >

React Functional组件:作为函数调用与作为组件调用

厍彭薄
2023-03-14
问题内容

说我有一个功能组件:

const Foo = (props) => ( <div>{props.name}</div> );

直接将其作为函数调用有什么区别:

const fooParent = () => (
    <div> {Foo({ name: "foo" })} </div>
)

与将其称为组件相比:

const fooParent = () => (
    <div> <Foo name="foo"/> </div>
)

我对性能影响最感兴趣,React如何在内部对它们进行区别对待,也许对React Fiber中的情况可能有所不同,我听说功能组件的性能得到了提升。


问题答案:

调用它作为函数要快得多,事实上,几个月前就已经有讨论了。在这一点上,功能性反应组件不能是PureComponents,因此没有真正适用于它们的额外优化。

基本上,您可以将功能组件称为消除整个反应生命周期的功能。如果考虑一下,您可能甚至在现在的render方法中也使用了此技术。考虑一下:

... some component ...

render() {

  const tabHeaders =<TabHeaders>{this.props.tabs.map(this.renderTabHeader)}</TabHeader>;
  const tabContents = <TabContents>{this.props.tabs.map(this.renderTabContent)}</TabContents>;

  return (<div>
    {this.props.tabsBelow?[tabContents, tabHeaders] : [tabHeaders, tabContents]}
  </div>);
}

renderTabHeader方法返回一些反应组件,并且本来可以是功能组件,但在这种情况下只是一些组件类方法。

请参阅此文章以获取详细说明:https : //medium.com/missive-app/45-faster-
react-functional-components-now-3509a668e69f

还请检查执行此操作的babel插件:https : //babeljs.io/docs/plugins/transform-react-inline-
elements



 类似资料:
  • 问题内容: 我不确定之前是否有人问过这个问题,或者有人在reactjs上遇到过同样的问题。所以场景是这样的,我有一个包含一些javascript 的 index.html 文件。现在,在我的react组件上,我有一个仅在条件为true时才会呈现的条件。这意味着最初在我的页面加载时,尚未呈现该组件。当我切换按钮时,这就是渲染该组件的地方。该子组件需要调用index.html中包含的javascrip

  • 这里有一个问题,我在React.js应用程序中有一个FormControl组件,我在其中呈现了几种不同类型的其他组件。例如,在下面的代码中,您可以看到我呈现了一个CheckBoxWithLabel。你会注意到我传递了一个函数 因此,在CheckBoxWithLabel组件(代码未显示)中,我可以使用onChange事件(react中复选框的内置事件)调用它 因此,结果是,当单击复选框时,会调用父组

  • 问题内容: 在以下示例中,当单击时,将显示而不是。为什么?您将如何解决? 问题答案: React的对帐算法假定没有相反的信息,如果自定义组件出现在后续渲染的同一位置,则它与以前的组件相同,因此将重用前一个实例,而不是创建一个新实例。 如果要实现,则会看到被调用。 不同的节点类型 元素不太可能生成看起来像a 会生成的DOM 。无需花费时间尝试匹配这两种结构,React只是从头开始重建树。 作为推论,

  • 好的,我想我最好在这里补充一点,我知道代码看起来不太好,但我认为它会起作用,所以我很高兴你能解释为什么它不仅有效,而且无效。我也很高兴听到你对这个问题的解决办法! 我很难理解为什么下面的代码块似乎没有按照预期工作,我的意思是记忆

  • 我目前正在开发一个JComboBox组件,我希望在其中的组合框中有一个JTable用于下拉选择。我扩展了ListCellRenderer,并且在弹出窗口中有一个表。 我想用两种不同的方式来呈现。第一个作为所选行的绑定列的标签,当弹出窗口不可见时。第二种是在弹出窗口可见时用JScrollPane显示表。 不幸的是,当我这样做时,弹出窗口被缩小到列表的行高,这只为表的列留下了空间。 如果我只是使用滚动

  • 我目前正在使用axios从我的api中提取JSON数据,我正在映射这个数据并将其存储为变量。我希望能够在我的react组件中调用这些变量,但我似乎找不出最好的方法。 获取JSON数据并将其存储为变量 我希望能够在react组件中调用类似Profile.Major的东西,但我目前尝试的方法并不奏效。请让我知道这样做的正确方法。提前谢谢你。