【问题标题】:React - How to export a pure stateless componentReact - 如何导出纯无状态组件
【发布时间】:2017-06-01 09:37:52
【问题描述】:

如何导出无状态的纯哑组件?

如果我使用类,这可行:

import React, { Component } from 'react';

export default class Header extends Component {
    render(){
        return <pre>Header</pre>
    }
}

但是,如果我使用纯函数,我无法让它工作。

import React, { Component } from 'react';
export default const Header = () => {
    return <pre>Header</pre>
}

我错过了一些基本的东西吗?

【问题讨论】:

    标签: javascript reactjs ecmascript-6 export


    【解决方案1】:

    ES6 不允许export default const。您必须先声明该常量,然后再将其导出:

    const Header = () => {
      return <pre>Header</pre>
    };
    export default Header;
    

    此约束的存在是为了避免写入被禁止的export default a, b, c;:默认只能导出一个变量

    【讨论】:

      【解决方案2】:

      作为旁注。从技术上讲,您可以在不先声明变量的情况下 export default

      export default () => (
        <pre>Header</pre>
      )
      

      【讨论】:

      • 唯一的缺点是以这种方式导出的组件将在 chrome 的 React 开发工具中显示为 Unknown
      • 如何导入这样声明的函数?
      • @DanielThompson 您可以像这样导入它:import YourComponent from './path/to/component' 将路径替换为组件的实际路径。默认导出的导入名称可以是您喜欢的任何名称,在此示例中我选择了YourComponent
      【解决方案3】:

      你可以通过两种方式做到这一点

      const ComponentA = props => {
        return <div>{props.header}</div>;
      };
      
      export default ComponentA;

      2)

      export const ComponentA = props => {
        return <div>{props.header}</div>;
      };

      如果我们使用default 导出然后我们像这样导入

      import ComponentA from '../shared/componentA'
      

      如果我们不使用default 导出然后我们像这样导入

      import { ComponentA } from '../shared/componentA'
      

      【讨论】:

        【解决方案4】:

        你也可以使用函数声明来代替赋值:

        export default function Header() {
            return <pre>Header</pre>
        }
        

        在您的示例中,您已经使用了大括号和return,因此这显然符合您的需求,毫不妥协。

        【讨论】:

        • 在 Typescript 之前,这是我的首选方法。对于 TS,(不幸的是)返回到 const 箭头函数方法来声明属性类型很有用:const MyComponent: React.FC&lt;MyComponentProps&gt; = () =&gt; {}
        • @Trevor,真正的问题,我仍在使用 TS 迈出第一步:为什么不直接使用 export default function MyComponent(props: MyComponentProps) {} 而不是使用 const MyComponent: React.FC&lt;MyComponentProps&gt; = () =&gt; {}
        • @gmagno,如果你看一下 FC/FunctionComponent 的定义,你会发现它为你做了更多的事情:1)ReactElement | null 的返回类型,2)添加@ 987654328@ 添加到属性中,3) 将其他成员添加到 FC,例如 propTypesdefaultProps
        猜你喜欢
        • 1970-01-01
        • 2018-03-17
        • 2016-12-17
        • 1970-01-01
        • 2021-09-07
        • 1970-01-01
        • 2017-08-30
        • 2020-12-25
        • 2020-07-08
        相关资源
        最近更新 更多