为什么没有反应。组件函数定义包含对.state属性的引用?

时间:2018-02-03 16:02:38

标签: reactjs

我觉得这是一个愚蠢的问题,反映了我对javascript的有限理解。

source code for react中,function Component的定义未提及state,这是反应的核心概念。

  1. 这是因为react.component没有state属性, 如果用户在本地定义,则react.component的唯一子扩展名具有state属性?

  2. 或者state在其他地方定义了(在源代码中?)和我' m 完全错过了吗?

  3. 我查看了state的一些博客,教程和解释,但无法找到这个问题的答案。

2 个答案:

答案 0 :(得分:0)

Yoy必须通过React中的Stateful vs. Stateless Functional Components,这是一个链接

https://code.tutsplus.com/tutorials/stateful-vs-stateless-functional-components-in-react--cms-29541

答案 1 :(得分:0)

setState方法稍后会在您链接的文件中添加到Component的原型中。 setState(顾名思义)在组件中用于设置状态,然后触发render进程。这取决于组件的实现,以定义状态形状是组件构造函数。 e.g:

constructor() { 
    this.state = {
       foo: 0
    }
}

这是setState定义的Component的原因:

Component.prototype.setState = function(partialState, callback) {
  invariant(
    typeof partialState === 'object' ||
      typeof partialState === 'function' ||
      partialState == null,
    'setState(...): takes an object of state variables to update or a ' +
      'function which returns an object of state variables.',
  );
  this.updater.enqueueSetState(this, partialState, callback, 'setState');
};

在安装阶段将updater对象注入组件(更新程序的实现取决于平台);

function Component(props, context, updater)

因此,当您致电setState时调用enqueueSetState updater

稍后,通过各种函数(flushBatchedUpdatesupdateComponent)执行结束于_processPendingState - 在此函数中,它将挂起的状态更改出列并将它们分配给组件状态。

_processPendingState期望组件上有一个名为state的属性,这是最终更新状态时使用的属性。

_processPendingState的实施在这里:

https://github.com/facebook/react/blob/v0.14.7/src/renderers/shared/reconciler/ReactCompositeComponent.js#L631-L658

详细说明内部反应:

https://bogdan-lyashenko.github.io/Under-the-hood-ReactJS/