在ReactJS中导出(默认)类

Che*_*ffs 46 javascript syntax ecmascript-6 reactjs

如果我正在创建一个组件,似乎你可以用很多不同的方式创建一个类.这些有什么区别?我怎么知道使用哪一个?

import React, {Component} from 'react'

export default class Header extends Component {

}

export const Header = React.createClass({

})

export default React.createClass({

})
Run Code Online (Sandbox Code Playgroud)

我只是假设他们做了不同的事情,还是仅仅是不同的语法?

如果有人能给我一个快速解释或链接,我会非常感激.我不想从一个新的框架开始,不知道究竟有什么区别.

Nic*_*all 108

嗨,欢迎来到React!

我认为你遇到麻烦的部分原因并不是特定于React,而是与新的ES2015模块语法有关.在创建React类组件时,对于大多数意图和目的,您可以认为它在React.createClass功能上等同于class MyComponent extends React.Component.一种是使用新的ES2015类语法,而另一种是使用ES2015之前的语法.

要了解模块,我建议您阅读一些关于新模块语法的文章以熟悉它.这是一个很好的开始:http: //www.2ality.com/2014/09/es6-modules-final.html.

简而言之,这些只是语法上的差异,但我会尝试快速浏览:

/**
 * This is how you import stuff.  In this case you're actually 
 * importing two things:  React itself and just the "Component" 
 * part from React.  Importing the "Component" part by itself makes it
 * so that you can do something like:
 *
 * class MyComponent extends Component ...
 * 
 * instead of...
 * 
 * class MyComponent extends React.Component
 * 
 * Also note the comma below
 */
import React, {Component} from 'react';


/**
 * This is a "default" export.  That means when you import 
 * this module you can do so without needing a specific module
 * name or brackets, e.g.
 * 
 * import Header from './header';
 *
 * instead of...
 *
 * import { Header } from './header';
 */
export default class Header extends Component {

}

/**
 * This is a named export.  That means you must explicitly
 * import "Header" when importing this module, e.g.
 *
 * import { Header } from './header';
 *
 * instead of...
 * 
 * import Header from './header';
 */
export const Header = React.createClass({

})

/**
 * This is another "default" export, only just with a 
 * little more shorthand syntax.  It'd be functionally 
 * equivalent to doing:
 *
 * const MyClass = React.createClass({ ... });
 * export default MyClass;
 */
export default React.createClass({

})
Run Code Online (Sandbox Code Playgroud)

  • 这是关于模块的好文章:https://hacks.mozilla.org/2015/08/es6-in-depth-modules/ (5认同)