美文网首页前端路旁的那些花儿
为什么函数组件也需要引入 React?

为什么函数组件也需要引入 React?

作者: wfatec | 来源:发表于2019-05-31 16:20 被阅读0次

这里主要参考了Why import React from “react” in a functional component?,并作了适当修改和补充。

随着新版本React正式引入了hooks,函数式组件的使用会变得更加普遍,但是不知道你有没有注意过,我们有时候在代码中明明没有使用React,仍然需要在头部写上import React from "React"

下面我们创建一个简单的函数式组件:

import React from "react";
const App = () => (
  <div>Hello World!!!</div>
);
export default App;

我们看到,代码中除了开头引入时出现了React,其它地方都没有其踪影。但是当去掉import React from "react"时,程序却会执行出错ReferenceError: React is not defined

那么原因出在哪儿呢?

当我们深入了解React底层的执行原理后就会发现并理解问题的原因!

答案就是,我们的JSX语法只是一种语法糖,它最终会被转译成纯粹的js语法,因此在babel转译之后,我们的代码就变成了:

var App = function App() {
  return React.createElement(
    "div",
    null,
    "Hello World!!!"
  );
};

这里出现了React.createElement,这就是为什么我们需要在函数式组件开头引入React的原因!

当然,有时候我们频繁的手动引入React过于繁琐,因此我们可以通过babel-plugin-react-require来实现react的自动导入,实际上该插件的功能非常简单,就是在转译时,在文件头插入import React from 'react';。同时需要注意的是,该插件只对未继承React.Component的无状态函数式组件生效,因此对于其它react函数,则仍需手动引入react!

当然,并不是所有地方都需要引入react的,例如:

export default props => ["Not importing React is fine!", 1, 2, 3];

这仍是一个函数式组件,但其转译之后并没有用到React.createElement,因此无需引入react

相关文章

  • 为什么函数组件也需要引入 React?

    这里主要参考了Why import React from “react” in a functional comp...

  • React Hook

    简介 :原本函数组件和类组件同为react组件,但是由于函数组件为无状态组件,react hook 的引入,让函数...

  • react hook介绍

    react hook是什么 react hook是react中引入新特性,它可以让react函数组件也拥有状态;通...

  • react hooks userState

    React引入了React Hooks,简单点说就是可以完全不用类来写组件,可以用函数来写组件。函数使用state...

  • 最佳实践React性能优化

    1: React.lazy和React.Suspense封装dynamic函数动态引入组件 1:基本使用 2:la...

  • 利用 React 高阶组件实现一个面包屑导航

    什么是 React 高阶组件 React 高阶组件就是以高阶函数的方式包裹需要修饰的 React 组件,并返回处理...

  • React 性能优化 - 避免重复渲染

    对于函数组件是否需要再次渲染,可以根据 React.memo 与 React.useMemo 来优化。 函数组件优...

  • React基础

    React包含react元素和react组件 react元素 react组件 react组件分为函数组件和类组件 ...

  • Hello - RN

    Hello React-Native 导入 引入react 的 Component 抽象组件 引入react-n...

  • Vue 与 React 对比

    一、书写格式 React组件分为简单无状态的函数组件和有状态的类组件,任何组件只要引入后,都可以在其它组件中使用;...

网友评论

    本文标题:为什么函数组件也需要引入 React?

    本文链接:https://www.haomeiwen.com/subject/rirgtctx.html