es6 반응 구성 요소가 "내보내기 기본값"에서만 작동하는 이유는 무엇입니까?


241

이 구성 요소는 작동합니다.

export class Template extends React.Component {
    render() {
        return (
            <div> component </div>
        );
    }
};
export default Template;

마지막 행을 제거하면 작동하지 않습니다.

Uncaught TypeError: Cannot read property 'toUpperCase' of undefined

es6 구문의 내용을 이해하지 못합니다. "default"부호없이 내 보내지 않아도됩니까?


7
다음과 같이 쓸 수 있습니다 export default class Template extends React.Component {
andykenward

알아. 그러나 "default"없이 내 보낸 구성 요소를 어떻게 가져올 수 있습니까? 가능해야합니다
stkvtflw

2
@stkvtflw 질문에 답변 한 경우 다른 사용자도 혜택을 볼 수 있도록 수락하십시오.
Jed Richards

답변:


571

없이 내보내기 default는 "명명 된 내보내기"라는 의미입니다. 단일 파일에 여러 개의 명명 된 내보내기를 가질 수 있습니다. 이 작업을 수행하면

class Template {}
class AnotherTemplate {}

export { Template, AnotherTemplate }

그런 다음 정확한 이름을 사용하여 이러한 내보내기를 가져와야합니다. 따라서 이러한 구성 요소를 다른 파일에서 사용하려면

import {Template, AnotherTemplate} from './components/templates'

또는 default이와 같이 내보내기로 내보내는 경우

export default class Template {}

그런 다음 다른 파일에 당신이를 사용하지 않고 기본 내보내기를 가져 {}과 같이,

import Template from './components/templates'

파일 당 하나의 기본 내보내기 만있을 수 있습니다. React에서는 파일에서 하나의 구성 요소를 내보내고 기본 내보내기로 내보내는 규칙입니다.

가져올 때 기본 내보내기의 이름을 자유롭게 바꿀 수 있습니다.

import TheTemplate from './components/templates'

기본 내보내기와 명명 된 내보내기를 동시에 가져올 수 있습니다.

import Template,{AnotherTemplate} from './components/templates'

12
확인. 그러나 이것은 내가 근거를 보지 않고 암기 해야하는 또 다른 겉보기 임의 결정처럼 보입니다. 이 같은 이유를 놓치고 있습니까? 많은 프로젝트에는 수십 개의 React 컴포넌트가 있습니다. 아무리 작은 것처럼 보일지라도 각각의 파일을 갖는 것은 약간 항문입니다. 많은 사람들이 많은 도우미 기능을 공유하면 특히 고통 스럽습니다. 그것은 더 많은 라인이 동기화되도록 유지합니다. 내가 무엇을 놓치고 있습니까?

9
감사합니다. 나는 당신이 대답을 완벽하게 설명했다고 생각합니다 import React, {Component} from 'react';.
Qian Chen

10
좋은 대답입니다. 추가해야 할 사항이 있습니다. import RaisedButton from 'material-ui/RaisedButton'; 대신 imports 문을 사용하십시오. 대신에 import {RaisedButton} from 'material-ui'; 빌드 프로세스가 빨라지고 빌드 출력이 작아집니다.
Shekhar Kumar


4
@ShekharKumar import Binding from 'module/Binding'보다 효율적인 소스 가 import {Binding} from 'module'있습니까?
Jeevan Takhar

4

가져오고 내보내는 동안 {}를 추가하십시오. export { ... };| import { ... } from './Template';

수출import { ... } from './Template'

수출 기본값import ... from './Template'


다음은 실제 예입니다.

// ExportExample.js
import React from "react";

function DefaultExport() {
  return "This is the default export";
}

function Export1() {
  return "Export without default 1";
}

function Export2() {
  return "Export without default 2";
}

export default DefaultExport;
export { Export1, Export2 };

// App.js
import React from "react";
import DefaultExport, { Export1, Export2 } from "./ExportExample";

export default function App() {
  return (
    <>
      <strong>
        <DefaultExport />
      </strong>
      <br />
      <Export1 />
      <br />
      <Export2 />
    </>
  );
}

⚡️ 작업 할 샌드 박스 : https://codesandbox.io/s/export-import-example-react-jl839?fontsize=14&hidenavigation=1&theme=dark

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.