2015-08-06 23 views
135

Thành phần này hoạt động:Tại sao thành phần phản ứng es6 chỉ hoạt động với "mặc định xuất"?

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

Nếu tôi xóa hàng cuối cùng, nó không hoạt động.

Uncaught TypeError: Cannot read property 'toUpperCase' of undefined 

Tôi đoán, tôi không hiểu điều gì đó bằng cú pháp es6. Nó không phải xuất khẩu mà không có dấu "mặc định"?

+2

bạn có thể viết như 'Mẫu mặc định xuất khẩu mở rộng React.Component {' – andykenward

+0

Tôi biết. Nhưng làm cách nào tôi có thể nhập thành phần được xuất mà không có "mặc định"? Nó có thể là – stkvtflw

+1

@stkvtflw Nếu tôi trả lời câu hỏi của bạn, vui lòng chấp nhận câu hỏi này để những người dùng khác cũng có thể hưởng lợi. – WildService

Trả lời

388

Xuất mà không có default có nghĩa là "xuất có tên". Bạn có thể có nhiều tên được đặt trong một tệp. Vì vậy, nếu bạn làm điều này,

export class Template {} 
export class AnotherTemplate {} 

thì bạn phải nhập các xuất này bằng tên chính xác của chúng. Vì vậy, để sử dụng các thành phần này trong tập tin khác, bạn sẽ phải làm,

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

Ngoài ra nếu bạn xuất như việc xuất khẩu default như thế này,

export default class Template {} 

Sau đó trong tập tin khác bạn nhập xuất khẩu mặc định mà không sử dụng số {}, như thế này,

import Template from './components/templates' 

Chỉ có thể xuất một lần mặc định cho mỗi tệp. Trong React, nó là một quy ước để xuất một thành phần từ một tệp và xuất nó là xuất khẩu mặc định.

Bạn đang miễn phí để đổi tên xuất khẩu mặc định khi bạn nhập nó,

import TheTemplate from './components/templates' 

Và bạn có thể nhập mặc định và đặt tên là kim ngạch xuất khẩu cùng một lúc,

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

OK. Nhưng điều này có vẻ giống như một quyết định dường như tùy tiện mà tôi không thấy lý do nhưng phải ghi nhớ. Tôi có thiếu lý do chính đáng nào không? Trong nhiều dự án sẽ có hàng tá thành phần React. Có từng tập tin riêng của nó, dù có vẻ nhỏ thế nào, tốt, một chút hậu môn. Nó đặc biệt đau đớn nếu nhiều người trong số họ chia sẻ các khối chức năng trợ giúp. Nó làm cho nhiều dòng của công cụ để giữ trong đồng bộ mà dường như một chút counter-goodness. Tôi đang thiếu gì? –

+2

Tất cả các quyết định phong cách và quy ước như thế này có phần tùy ý và tùy theo sở thích cá nhân. Bạn nói đúng, đôi khi nó có thể có ý nghĩa để nhóm nhiều thành phần vào một tập tin với những người giúp đỡ, đặc biệt là cho các dự án nhỏ/đơn giản. Tôi đoán một lý do để có một thành phần cho mỗi tệp đang thử nghiệm ... khi nhập tệp đó để kiểm tra tệp, nó có thể trợ giúp nếu bạn chỉ nhập số tiền tối thiểu của các mã và phụ thuộc phụ khác cùng với nó. Một lý do khác có thể là do sự khác biệt đơn giản đối với các tệp nhỏ tập trung trong quá trình đánh giá mã, v.v. – WildService

+3

Cảm ơn bạn. Tôi nghĩ bạn trả lời một cách hoàn hảo giải thích điều này: 'import React, {Component} từ 'react';'. –

Các vấn đề liên quan