微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 React 类组件内部渲染常量

如何解决在 React 类组件内部渲染常量

我有一个关于在 React 类组件中使用常量呈现内容的方式的快速问题。所以下面的代码工作正常(使用 map 函数渲染一个常量):

class App extends React.Component {

array = [
   {
      name: "Sarah",age: 27
   },{
      name: "Sam",age: 35
   }
 ]

render() {
  const output = this.array.map(elem => (
      <div>
        <p>{elem.name}</p>
        <p>{elem.age}</p>
      </div>
  ));
    return (
      <div>{output}</div>
    );
  }
} 

但是,以下内容生成一个空白页面(我只是定义了一个返回 div 的常量并尝试呈现它):

class App extends React.Component {

  render() {
    const Output = () => (
        <div>Hello</div>
    );
    return (
      <div>{Output}</div>
    );
  }
}

但是如果我使用大括号而不是大括号,则几乎相同的代码可以工作:

class App extends React.Component {
  render() {
    const Output = () => (
      <div>Hello</div>
    )
    return (
      <div>
        <Output />
      </div>
    )
  }
}

所以看起来这与大括号和尖括号有关。花括号在我使用 map 函数时起作用,但在我定义一个常量返回 div 并尝试直接渲染它时则不起作用。然后当我使用尖括号时它再次起作用......这有点奇怪。我知道这远不是最重要的事情,我只是想深入了解这一点。提前致谢!

解决方法

class App extends React.Component {

  render() {
    const Output = () => (
        <div>Hello</div>
    );
    return (
      <div>{Output()}</div>
    );
  }
}

如果您尝试调用函数 Output(),它将返回 JSX 但遵循此 article 他们不建议这样做

,

尖括号用于渲染组件。由于您已将 Output 定义为返回一些 JSX 的函数,因此就 React 而言,这使其成为一个函数组件(或者更确切地说是 Babel,它处理您的 JSX 的转译)。

您可以使用大括号,但是您应该将 Output 更改为 React 节点。这样做的方法如下:

class App extends React.Component {

  render() {
    const Output = <div>Hello</div>
    return (
      <div>{Output}</div>
    );
  }
}

检查 THIS 答案以了解 React 节点、元素等之间的区别。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。