【发布时间】:2017-09-29 03:51:52
【问题描述】:
有时我想将我的条件渲染移出render(),而我总是在这两种方法之间进退两难:
class MyComponent extends React.Component {
_renderSomething() => {
const {x, y, z} = this.props
// conditional rendering based on props
}
render() {
return (
{ this._renderSomething }
// vs
{ renderSomething(this.props) }
// which one is better?
)
}
}
const renderSomething = (props) => {
const {x, y, z} = props
// conditional rendering based on props
}
export default MyComponent
_renderSomething 和 this.renderSomething 之间的性能差异?
我应该什么时候使用哪个?
【问题讨论】:
-
一个非常好的问题!我很好奇……不过还有另一种选择。你可以创建一个全新的组件,然后像
<MyComplexComponent {...props}>一样调用它。您可以将其作为功能组件。 -
我认为如果我们直接使用 _renderSomething() 那么我们需要该函数的实例来访问道具。但是在 --const renderSomething...--我们不需要这个关键字
-
这是基于意见的,如果没有看到 “复杂的条件” 部分,很难给您建议 - 正是这些复杂性有助于指导我们愿意做出的权衡当我们考虑一种方法而不是另一种方法时
-
一般来说,无状态组件应该只是一个纯函数,它接受 props 并返回要渲染的组件——担心函数
f或this.f是一个微优化,不应该被视为如何构建代码的主要指南 - 允许这样的事情来决定代码的结构表明根本缺乏理解 -
@naomik 感谢您的洞察力 naomik。我明白你来自哪里。然而,我关心的并不是诸如
f或this.f之类的微优化。忘记复杂的渲染部分吧,这不是我的主要关注点。让我们假设 条件渲染 是一个简单的嵌套 if-else。我的重点是功能组件将被转换为_createClass(renderSomething,[{}])之类的东西,而内部功能将只是另一个var _renderSomething = function...。这里有什么不同吗?似乎功能组件更昂贵?