React.Component 与 React.createClass

IT技术 reactjs
2021-04-20 12:13:33

我很困惑组件和react类之间有什么区别?

我什么时候在 React 类上使用组件?看起来组件是一个类,而 createClass 创建一个组件。

https://facebook.github.io/react/docs/top-level-api.html

react组件

这是使用 ES6 类定义的 React 组件的基类。有关如何在 React 中使用 ES6 类,请参阅可重用组件。基类实际提供了哪些方法,参见组件API。

React.createClass

创建一个组件类,给定一个规范。一个组件实现了一个 render 方法,该方法返回一个单独的孩子。那个孩子可能有一个任意深的孩子结构。使组件不同于标准原型类的一件事是您不需要对它们调用 new。它们是方便的包装器,可以为您构造支持实例(通过 new)。

5个回答

唯一React.createClass不支持的功能MyComponent extends React.Component是 mixins。

这样做getInitialState()你可以这样做:

class MyComponent extends React.Component {
  constructor(props, context) {
    super(props, context);

    // initial state
    this.state = {
      counter: 0
    };
  }

  ...
}

或者如果你使用像 babel 这样的转译器,你可以得到

class MyComponent extends React.Component {
  state = {
    counter: 0
  }

  ...
}

除了 createClass 提供的自动绑定,您可以.bind(this)像上面显示的那样使用显式绑定,或者使用粗箭头 ES6 语法:

class MyComponent extends React.Component {
  onClick = () => {
    // do something
  }
  ...
}

您可以将内容放入构造函数中,而不是将内容放在 componentWillMount 中,如下所示:

class MyComponent extends React.Component {
  constructor(props, context) {
    super(props, context);

    // what you would have put in componentWillMount
  }

  ...
}

React 文档本身有更多详细信息,但基本上 React.createClass 购买的唯一附加功能是 mixins,但是你可以用 mixin 完成的任何事情都可以用上下文和更高阶的组件完成。

这应该是一个可以接受的答案。感谢您的详细和最新的解释。
2021-06-09 12:13:33

有两种方法可以做同样的事情。

React.createClass 是一个返回 Component 类的函数。

MyComponent = React.createClass({
  ...
});

React.Component是一个可以扩展的现有组件。主要在使用 ES6 时有用。

MyComponent extends React.Component {
  ...
}
还有更多的不同。例如 getInitialState() 在 ES6 React.Component 中不存在。
2021-06-04 12:13:33
看看Lewis C下面的回答。它解释了差异。
2021-06-11 12:13:33

React.createClass - 创建组件类的方法

通过 extends 更好地与 ES6 module一起使用React.Component,它扩展了 Component 类而不是调用createClass

两者之间的差异很小,

语法: React.createClass:

var MyComponent = React.createClass({ });

react.组件:

export default class MyComponent extends React.Component{ }

getInitialState() : React.createClass: 是 React.Component: 否

构造函数(): React.createClass:否 React.Component:是

propTypes 语法: React.createClass:

var MyComponent = React.createClass({
    propTypes: { }
});

react.组件:

export default class MyComponent extends React.Component{ }
MyComponent.prototypes = { }

默认属性: React.createClass:

var MyComponent = React.createClass({
    getDefaultProps(): { return {} }
});

react.组件:

export default class MyComponent extends React.Component{ }
MyComponent.defaultProps = { }

状态: React.createClass:

State changes can be made inside getInitialState() function

react.组件:

State changes can be made inside constructor(props) function

这个:
React.createClass:

automatically bind 'this' values.
Ex: <div onClick={this.handleClick}></div>
'this' can be accessed by default in handleClick function

react.组件:

whereas here we need to bind explicitly,
Ex: <div onClick={this.handleClick.bind(this)}></div>
感谢所有示例 :) 在 React.Component 中:类似于 MyComponent.defaultProps 我们有选项 MyComponent.defaultState 吗?
2021-06-14 12:13:33

看起来 React 推荐我们使用 React.createClass

我所知道的

  1. MyComponent extends React.Component 不支持 getInitialState()

  2. 使用.bind(this)React.createClass你会得到这个

    警告:bind():您正在将组件方法绑定到组件。React 会以高性能的方式自动为您执行此操作,因此您可以安全地删除此调用。

我想可能不止这些。

如果有人列出所有React.createClass功能将是非常棒的。

注意:React 目前在 0.14.3

根据这个facebook.github.io/react/blog/2015/03/10/react-v0.13.html from v0.13,他们计划在某个时候删除 React.createClass() 语法以支持另一个一 Our eventual goal is for ES6 classes to replace React.createClass completely, but until we have a replacement for current mixin use cases and support for class property initializers in the language, we don't plan to deprecate React.createClass.
2021-05-23 12:13:33

老实说,唯一的区别是 React.createClass 使用了 mixins 而新的 ES6 语法没有。

两者都只是语法,选择最适合您的。React 实际上希望在未来的更新中弃用 React.createClass 以支持 ES6 语法。

所以我建议你和未来的用户检查这些链接,因为这个线程上的大部分答案都是相关的,并且有详细的解释。

https://ultimatecourses.com/blog/react-create-class-versus-component

https://www.newline.co/fullstack-react/articles/react-create-class-vs-es6-class-components/

哦,我明白了,我只是认为这是不必要的重复,因为代码示例和代码片段已经在链接中的该页面上。但是感谢您的提示,我会继续执行此操作!
2021-06-03 12:13:33