通过ES6课程进行反应。它为什么有效?

时间:2017-02-03 11:54:06

标签: reactjs ecmascript-6

我有一个问题。也许有点傻。

例如,我有一个类, state baseState ,他们链接到construcor中的状态

"userRatingCount": 30937

当然这对我有好处。简单重置状态))) 但是..为什么 this.basestate 为空,同时 this.state 不是。

为什么javascript的行为好像没有创建对象的引用?

非常感谢你!

2 个答案:

答案 0 :(得分:2)

this.baseState = this.state;

您正在定义React.Component类的全新属性。

我的构造函数意味着在您初始化React.Component对象的特定时间它们将是平等的。

这是一项JavaScript功能,可以动态地向任何对象添加新属性。

稍后,当您执行Component类的setState()方法时,只会更新预定义的state属性,而不会更新另一个。

以下是React.Component的源代码部分:

/**
 * Module for creating composite components.
 *
 * @class ReactClass
 */
var ReactClass = {

  createClass: function(spec) {
    // To keep our warnings more understandable, we'll use a little hack here to
    // ensure that Constructor.name !== 'Constructor'. This makes sure we don't
    // unnecessarily identify a class without displayName as 'Constructor'.
    var Constructor = identity(function(props, context, updater) {
      // This constructor gets overridden by mocks. The argument is used
      // by mocks to assert on what gets mounted.

      if (__DEV__) {
        warning(
          this instanceof Constructor,
          'Something is calling a React component directly. Use a factory or ' +
          'JSX instead. See: https://facebook.github.io/react/warnings/legacy-factories.html'
        );
      }

      // Wire up auto-binding
      if (this.__reactAutoBindPairs.length) {
        bindAutoBindMethods(this);
      }

      this.props = props;
      this.context = context;
      this.refs = emptyObject;
      this.updater = updater || ReactNoopUpdateQueue;

      this.state = null;

只是为了可视化组件内部的内容。

答案 1 :(得分:1)

当您执行作业this.baseState = this.state时,您将this.state 的值分配给变量this.baseState,实质上是制作副本。如果在此之后使用新变量更新this.state,则它不会反映在您之前创建的副本中。