美文网首页
组件, ReactElement 与组件实例

组件, ReactElement 与组件实例

作者: McDu | 来源:发表于2017-12-14 20:39 被阅读16次

组件实例是组件类的实例化对象, 通常被用来管理内部状态, 处理生命周期函数.

import ReactDOM from 'react-dom';
import App from './App';
let instance = ReactDOM.render(<App />, document.getElementById('root'));

console.log(App);
console.log(<App />);
console.log(instance);

1. 组件 App

App 就是组件.
控制台打印出来的是:


一个函数或类, 这是一个名为 App 的类, JavaScript 中的类是基于 Function 原型生成的, 所以这里打印了 function App() . 所以组件就是一个函数或类, 它决定了如何把数据变为视图.

2. ReactElement <App/>

type为类

ReactElement 打印出来的是一个普通的对象, 它描述了组件实例或 DOM 节点.

ReactElement 的两种类型

  1. DOM 节点, 当 ReactElementtype 属性为字符串时, 表示DOM 节点, props 属性对应 DOM 节点的属性.
// 在 jsx 中如下打印:
console.log(<h1>hello world</h1>)

得到的 ReactElement 结果为:

type为字符串
  1. 组件, 当 ReactElementtype 属性为函数或类时, 表示组件.

3. 组件实例

  1. ReactDOM.render 返回的就是组件实例, componentDidMount(), componentDidUpdate() 等其他生命周期函数中的 this 都指向组件实例.

  2. 在组件内将方法的 this 的执行上下文绑定在 constructor 中时, this 指向组件实例.

4. ref 与this 指向

由 this 指向组件实例可知,

class CustomTextInput extends React.Component {
  constructor(props) {
    super(props);
    this.focusTextInput = this.focusTextInput.bind(this);
  }

  focusTextInput() {
    // Explicitly focus the text input using the raw DOM API
    this.textInput.focus();
  }

  render() {
    // Use the `ref` callback to store a reference to the text input DOM
    // element in an instance field (for example, this.textInput).
    return (
      <div>
        <input
          type="text"
          ref={(input) => { this.textInput = input; }} />
        <input
          type="button"
          value="Focus the text input"
          onClick={this.focusTextInput}
        />
      </div>
    );
  }
}

React 官网这一节:Refs & the DOM中,下面的 this 指向组件实例:

 ref={(input) => { this.textInput = input; }} />

codesandbox 中运行可知:

小结参考链接

ref 属性可以设置为一个回调函数,这也是官方强烈推荐的用法;这个函数执行的时机为:

  • 组件被挂载后,回调函数被立即执行,回调函数的参数为该组件的具体实例。
  • 组件被卸载或者原有的 ref 属性本身发生变化时,回调也会被立即执行,此时回调函数参数为null,以确保内存不泄露。
    →看我的演示代码→打开相应的 console 即可

参考 <<React-Redux 开发实例精解>>

相关文章

  • 组件, ReactElement 与组件实例

    组件实例是组件类的实例化对象, 通常被用来管理内部状态, 处理生命周期函数. 1. 组件 App App 就是组件...

  • 组件、ReactElement、组件实例的区别及组件的渲染过程

    一、组件、ReactElement、组件实例的区别 概念上的区别 组件是一个函数或者一个类,它决定了如何把数据变成...

  • vue——组件

    组件是什么? 组件是可复用的 Vue 实例,且带有一个名字。 组件的注册与使用 组件与vue实例一样,需要注册,才...

  • vue笔记-14(组件-私有组件和组件的数据与方法)

    私有组件和组件的数据与方法 定义实例内部私有组件只能被某个vm实例使用的组件通过vue对象的components指...

  • Vue-组件

    一.组件 组件都具有模板,template new Vue()创建的是根组件 组件与实例一一对应,创建一个实例就是...

  • 今日总结

    1.函数组件与类组件的区别? 函数组件:没有实例, 没有生命周期,没有state,只能接收props类组件:有实例...

  • Vue实例方法

    $parent:访问当前组件实例父实例 $root: 访问当前组件的根实例,如果当前组件没有父实例,表示当前组件实...

  • React的两个对象:ReactElement与组件实例

    ReactElement即大名鼎鼎的“虚拟DOM”,它是一个普通的对象,描述了一个组件的实例或一个DOM节点及其属...

  • react-ref

    ref:react对真实dom的引用 ref在reactElement上 ref在react组件上

  • vue学习大纲4-vue组件详细解读

    全局组件 多个实例中都能用到的组件,叫全局组件 例如下面代码 局部组件 只能在某个实例中使用的组件,不能跨实例使用...

网友评论

      本文标题:组件, ReactElement 与组件实例

      本文链接:https://www.haomeiwen.com/subject/ezllwxtx.html