文章目录
前言
react的组件主要有两种,函数式组件和类式组件。
ps:以下例子省略相关库的引入。
函数式组件与类式组件
函数式组件
<script type="text/babel">
//1.创建函数式组件
function MyComponent(){
console.log(this); //此处的this是undefined,因为babel编译后开启了严格模式
return <h2>我是用函数定义的组件(适用于【简单组件】的定义)</h2>
}
//2.渲染组件到页面
ReactDOM.render(<MyComponent/>, document.getElementById('test'))
</script>
执行了ReactDOM.render(<MyComponent/>...)
之后,发生了什么?
- React解析组件标签,找到了MyComponent组件。
- 发现组件是使用函数定义的,随后调用该函数,将返回的虚拟DOM转为真实DOM,随后呈现在页面中。
类式组件
<script type="text/babel">
//1.创建类式组件
class MyComponent extends React.Component { // 继承了react组件很多属性
render(){
//render是放在哪里的?—— MyComponent的原型对象上,供实例使用。
//render中的this是谁?—— MyComponent的实例对象 也称为 MyComponent组件实例对象。
console.log('render中的this:',this);
return <h2>我是用类定义的组件(适用于【复杂组件】的定义)</h2>
}
}
//2.渲染组件到页面
ReactDOM.render(<MyComponent/>,document.getElementById('test'))
</script>
执行了ReactDOM.render(<MyComponent/>...)
之后,发生了什么?
- React解析组件标签,找到了MyComponent组件。
- 发现组件是使用类定义的,随后new出来该类的实例,并通过该实例调用到原型上的render方法。
- 将render返回的虚拟DOM转为真实DOM,随后呈现在页面中。
学习类式组件的前提知识点,建议看看我写的一个文章【es6入门】类的声明与继承,class与extends语法糖
非受控组件与受控组件
我是这么理解的,非受控是数据发现变化后需要人为去触发组件事件,组件才去处理数据;而受控组件是只要数据有变化,组件就会自动处理数据;
注意:一般受控组件优于非受控组件,因为非受控组件会可能使用refs(性能方面的考量);
简单组件和复杂组件
只需要记住:拥有状态的组件就是复杂组件,就是后面会讲到的state、prop等。