如果我正在创建一个组件,似乎你可以用很多不同的方式创建一个类。这些有什么区别?我怎么知道使用哪一个?
import React, {Component} from 'react'
export default class Header extends Component {
}
export const Header = React.createClass({
})
export default React.createClass({
})
我只是假设他们做了不同的事情,或者它只是不同的语法?
如果有人能给我一个快速解释或链接,我会非常感激。我不想从一个新的框架开始,不知道到底有什么区别。
答案 0 :(得分:102)
嗨,欢迎来到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({
})