reactjs - 返回 JSX 的函数和类组件有什么区别?

标签 reactjs jsx

创建返回 JSX 的函数和创建扩展 Component 的类有什么区别?

// Syntax ES6/7

const Banner = (()=>(
  <div>
    My Awesome Component
  </div>
));

class Poster extends Component { // or createClass
  render() {
    <div>
      My Awesome Component
    </div>
  }
}
  1. 返回 JSX 的函数真的就是我们所说的 React Element,而不是组件吗?

  2. 如果上述说法不正确,那么返回 JSX 的函数是否只是一个没有状态的组件?

  3. 如果以上都不成立,那么它们被称为什么?

最佳答案

“返回 jsx 的函数”和(无状态)功能组件 (SFC) 之间存在重要区别。

鉴于此功能:

const Banner = (()=>(
  <div>
    My Awesome Component
  </div>
));

你无法判断这是一个函数组件还是一个返回 JSX 的函数。 这个函数可以是它们两个。

当你像这样使用它时:

<Banner />

功能Banner用作功能组件(SFC)。

此外,像这样使用:

<div>{Banner()}/div>

函数 Banner 用作返回 JSX 的函数。

SFC 和返回 JSX 的函数都返回 JSX(又名 React Component 或 React Node)。 但是:

  • sfc 接受 props 参数
  • 这些 props 是随 React 运行时提供的。

另一方面,

  • 返回 JSX 的函数不需要参数。
  • 函数返回 JSX 的参数提供了使用代码

实际获得的vdom(React Node)根据使用的不同而有所不同。

关于reactjs - 返回 JSX 的函数和类组件有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35903251/

相关文章:

reactjs - Material UI 删除了 TextField 自动填充上的黄色背景

node.js - 为什么 npm install 会因 node-sass 相关错误而失败?

seo - 将 prerender.io 与 ReactJS 一起用于 SEO

javascript - JSX 消除 HTML 中的箭头 (>)

reactjs - React (create-react-app) 中的 tsc 编译需要显式编译标志,尽管我在 tsconfig.json 中设置了它们

reactjs - 为什么 create-react-app 不创建新应用程序

jquery - 在 Gatsby 中使用 jQuery 和外部脚本

javascript - 寻找简单地将 jsx 转换为标记字符串的自定义 JSX babel 插件

html - ReactJS 项目未显示在本地主机上

reactjs - 使用 react-navigation 测试 onClick