无法导出const箭头功能

Nik*_* So 42 ecmascript-6

ES6的新手,我试图制作一个像这样的React简单功能组件

// ./Todo.jsx

    export default const Todo = ({
      todos,
      onTodoClick,
    }) => (
      <ul>
        {todos.map( (todo, i) =>
          <li key     = {i} 
              onClick = {() => onTodoClick(i) } 
              style   = {{textDecoration: todo.completed ? 'line-through': 'none' }}
              >
            {todo.text}
          </li>
        )}
      </ul>
    )
Run Code Online (Sandbox Code Playgroud)

// Another file 
import Todo from './Todos.jsx';
console.log(Todo) // undefined
Run Code Online (Sandbox Code Playgroud)

没有产生箭头功能.

但如果我在导出链接中省略"const todo ="部分,就像这样

    export default ({
      todos,
      onTodoClick,
    }) => (...)
Run Code Online (Sandbox Code Playgroud)

它成功导入.

这是为什么?

Hen*_*son 70

您正尝试导出默认值并同时声明变量,这是无效的语法.

请考虑以下情况,因为我们知道您只能使用关键字的一个实例声明多个变量,var a, b, c;导出定义根本没有意义.

export default var a, b, c;
Run Code Online (Sandbox Code Playgroud)

那是什么意思?什么会出口?

此外,使用export default语法已经创建了一个default需要包含值或引用的变量.

如果要将变量设为常量,请导出变量.

const Todo = () => {};

export default Todo;
Run Code Online (Sandbox Code Playgroud)

在ESDiscuss上有一个关于此的主题

  • 是的,但是使用 `class` 关键字只是语法糖,并且无论如何你不能在同一个 go 中声明超过 1 个类。`class A, B, C` 的语法有效。 (2认同)
  • 该规范还有 [一个有用的表格](http://www.ecma-international.org/ecma-262/6.0/#table-42) 关于不同类型的允许`export` (2认同)

小智 9

箭头函数默认导出:

import React from 'react';
const Body=()=>(
    <div>This is my body</div>
);
export default Body;
Run Code Online (Sandbox Code Playgroud)

箭头函数命名导出:

  1. 第一种方式
import React from 'react';

export const Body = () => (
    <div>This is my body</div>
);
Run Code Online (Sandbox Code Playgroud)
  1. 第二种方式
import React from 'react';

const Body = () => {
    return <div>This is my body</div>
};

export {Body};
Run Code Online (Sandbox Code Playgroud)

您还可以在同一文件中使用 1 个默认导出和多个命名导出,请检查以下示例:

示例1:

import React from 'react';

const Body1 = () => {
    return <div>This is my body1</div>
};

const Body2 = () => {
    return <div>This is my body2</div>
};

export {Body1, Body2};
Run Code Online (Sandbox Code Playgroud)
you can import by using below code.
import {Body1, Body2} from 'bodyComponentPath';
Run Code Online (Sandbox Code Playgroud)

实施例2

import React from 'react';
const MainBody = () => {
    return <div>This is my MainBody</div>
};

const Body1 = () => {
    return <div>This is my body1</div>
};

const Body2 = () => {
    return <div>This is my body2</div>
};

export {Body1, Body2};
export default MainBody;
Run Code Online (Sandbox Code Playgroud)
you can import by using below code.
import MainBody, {Body1, Body2} from 'bodyComponentPath';
Run Code Online (Sandbox Code Playgroud)

/* 仅在大括号内使用命名导出组件 */

从'bodyComponentPath'导入MainBody,{Body1,Body2};