javascript - 对 React 组件使用 ES6 类语法

标签 javascript inheritance reactjs ecmascript-6 prototypal-inheritance

据我所知,使用 ES6 创建和导出 React 类有两种方法。

也许被认为是旧方法:

export default React.createClass({
   ...
});

也许被认为是新的方式:

export class Todo extends React.Component {
   ...
};

今天有人问我,与"new"方式相比,为什么我更喜欢“旧”方式。除了"new"方式使用扩展并因此使用继承这一事实之外,我真的没有一个好的答案。我在 C# 中学到的始终是组合优于继承。在 javascript 中也是如此,在 95% 的情况下,更喜欢使用揭示模块模式而不是原型(prototype)继承。

作为一个相当新的 react 者,我的问题是,我是否遗漏了为什么新方法比旧方法更好的原因?在我看来,与继承一个函数相比,拥有一个接受参数并返回一个对象的函数要干净得多。

遵循转换(TodoComponent)或者添加某种装饰器而不是从 React.Component 扩展不是更好吗?

最佳答案

我倾向于始终查看 React 团队示例以获取指导。在本例中,他们提供了 whole example致力于 ES2015。正如您所提到的,这清楚地涵盖了"new"语法。

我还仔细阅读了大量代码,了解事情是如何完成的。大多数使用 ES2015 的项目也使用"new"语法。

关于javascript - 对 React 组件使用 ES6 类语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32149672/

相关文章:

javascript - 无法将数据从 HTML 表单发送到 Node 服务器

C++ protected 构造函数对派生类中的成员不可用

带有继承类的 flutter Dart JsonSerializable

c# - 如何清理?

javascript - 使用 javascript 按 id 对列表进行排序

javascript - ReactJS:用于 css 转换的切换类

reactjs - 如何在页面加载 react native 时加载函数

reactjs - 使用 Storybook 导入 scss 文件

reactjs - 类型错误 : Cannot read properties of undefined (reading 'down' )

javascript - 使用 jquery 表情符号插件时,componentDidMount 的行为与 useEffect 不同