导入语句:有或没有 React?

IT技术 reactjs ecmascript-6
2021-05-11 15:51:31

关于是否有必要导入React无状态组件存在一些争论,我找不到任何关于它的文档。所以:

//OPTION 1
import React, { PropTypes } from 'react';

//OPTION 2
import { PropTypes } from 'react';

export const Button = ({ action }) => {
  return (
    <button onClick={action}>Submit</button>
  );
}

Button.propTypes = {
  action: PropTypes.func.isRequired,
};

有人说选项 1 是使用 JSX 时的最佳实践;其他一些认为组件会因选项 2 而失败。

我已经尝试了这两种方法,但我看不出任何区别,该组件在两种情况下仍然有效。

选项 1 或选项 2:哪个是正确的?

2个回答

使用选项 1,因为 babel 会将您的 jsx 转换
<button onClick={action}>Submit</button>

React.createElement("button", { onClick: action }, "Submit");

所以如你所见,react必须在范围内。您有两个选择:

  1. 从“react”导入react;
  2. 或者全局定义 React

这取决于您如何构建文件。如果您使用的是像 webpack 这样的module打包器,并且没有全局 React module的概念,那么忽略 React 会抛出错误React is not defined

这是因为:

let C = <div />

变成:

let C = React.createElement("div", null)

所以在那个特定的module里面..React没有被导入,因此会在未定义的变量上跳闸。

您可以公开React窗口命名空间,然后您不需要将其导入到每个文件中。随你(由你决定。