使用 React 时,渲染组件时有什么区别(以及何时应用每种方法(?
这会以任何方式影响组件生命周期吗?或者影响钩子在组件中的运行方式?
方法一:
class App extends React.Component {
...
function getComponent() {
return <Component />
}
render() {
return this.getComponent()
}
}
方法2:
class App extends React.Component {
...
render() {
return <Component />
}
}
(注意:OP 现在已经改变了问题,它曾经在方法 1 中return {this.getComponent()}
。
方法 1 中的render
不正确(嗯,是在编辑之前(,它应该是:
render() {
return this.getComponent() // No {} wrapper
}
您需要 JSX 上下文中的{}
,但您不在 JSX 上下文中。例如,如果你想将this.getComponent
返回的内容包装在一个div
中,你可以使用 JSX 表达式在定义div
的 JSX 中定义div
的子项:
render() {
return <div>{this.getComponent()}</div>
}
整理好{}
后,是使用方法1还是方法2取决于您。如果你有渲染的实质性部分想要移动到它们自己的函数中,那很好。例如:
render() {
return (
<div>
{this.getHeader()}
{this.getBody()}
{this.getFooter()}
</div>
);
}
。尽管我想我可能会在这一点上争辩说,如果没有一个好的反驳,页眉、正文和页脚可能应该是组件(也许是函数组件(。但是像这样偶尔的帮助程序函数调用很好。
这会影响组件生命周期吗?
不。这只是render
中的一个函数调用。
两者之间没有真正的区别。我个人会尽可能只使用一种render()
方法,然后当方法太大时,将其部分提取到他们自己的方法中。
我找到了Kent C. Dodds的这篇很棒的文章。文章摘录如下:
React 不知道我们在 JSX 中调用函数和内联函数之间的区别。因此,它无法将任何内容与
Counter
函数相关联,因为它不像组件那样呈现。这就是为什么在渲染组件时需要使用JSX(或React.createElement(,而不是简单地调用函数。这样,使用的任何钩子都可以注册到 React 创建的组件的实例中。
考虑到这一点,在渲染使用钩子的组件时,听起来最好使用 JSX。