我正在浏览一些 React 项目,有时会看到-
export default () => {
但其他时候我看到——
export default class Entry extends React.Component {
.
两者之间有什么区别,即。导出会自动扩展React.Component
吗?最佳做法是什么?
我正在浏览一些 React 项目,有时会看到-
export default () => {
但其他时候我看到——
export default class Entry extends React.Component {
.
两者之间有什么区别,即。导出会自动扩展React.Component
吗?最佳做法是什么?
在export default () =>
你看到的是一个阵营0.14+ “功能组件”。
这是一种用于编写 React 组件的更简洁的新语法。它和其他语法都很好。
这些组件的行为就像一个 React 类,只定义了一个渲染方法。由于没有为功能组件创建组件实例,因此添加到一个的任何 ref 将评估为 null。函数式组件没有生命周期方法,但您可以将 .propTypes 和 .defaultProps 设置为函数的属性。
基本上做:
class MyComponent extends React.Component {
render() {
return <p>Hello</p>;
}
}
是相同的:
const MyComponent = () => <p>Hello</p>;
当在 React 组件内部使用并传递给 Render 时。
第一个是功能组件。然而,其他代码将导出一个常规类/React 组件。
例如
export default (withHistory, onUpdate) => {
const history = new HashHistory;
return (
<Router history={history} onUpdate={onUpdate}>
<Route path='/' component={Index} />
</Router>
);
};
将编译(至少使用 Babel+webpack)
...
var _reactRouterLibHashHistory = __webpack_require__(35);
var _reactRouterLibHashHistory2 = _interopRequireDefault(_reactRouterLibHashHistory);
exports['default'] = function (withHistory, onUpdate) {
var history = new _reactRouterLibHashHistory2['default']();
return React.createElement(
_reactRouter.Router,
{ history: history, onUpdate: onUpdate },
React.createElement(_reactRouter.Route, { path: '/', component: _routesIndex2['default'] })
);
};
module.exports = exports['default'];
...