web-dev-qa-db-ja.com

ReactJSのエクスポート(デフォルト)クラス

コンポーネントを作成する場合、さまざまな方法でクラスを作成できるようです。これらの違いは何ですか?使用するものを知るにはどうすればよいですか?

import React, {Component} from 'react'

export default class Header extends Component {

}

export const Header = React.createClass({

})

export default React.createClass({

})

私は彼らが異なることをすると仮定していますか、それとも単に異なる構文ですか?

誰かが私に簡単な説明、またはリンクを与えることができれば、私はそれを本当に感謝します。私は、違いが何であるかを正確に知らない新しいフレームワークから始めたくありません。

45
Cheese Puffs

こんにちは、Reactへようこそ!

あなたがここで問題を抱えているのは、実際にはReact固有ではなく、新しいES2015モジュール構文に関連していると思います。 Reactクラスコンポーネントを作成する場合、ほとんどの意図と目的に対して、React.createClassclass MyComponent extends React.Componentと機能的に同等であると考えることができます。 1つは新しいES2015クラス構文を使用しているだけで、もう1つは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({

})
105
Nick Ball