1.React 组件介绍

1.React 组件介绍
组件是 React的一等公民,使用React就是在用组件组件表示页面中的部分功能
组合多个组件实现完整的页面功能特点:可复用、独立、可组合
2. React 组件的两种创建方式
2.1使用函数创建组件
使用JS中的函数创建的组件叫做∶函数组件

  • 函数组件必须有返回值
  • 组件名称必须以大写字母开头,
  • React据此区分组件和普通的React元素使用函数名作为组件标签名

2.2使用类创建组件

  • 类组件∶使用ES6的class 创建的组件
  • 约定1:类名称也必须以大写字母开头
  • 约定2∶类组件应该继承React.Component父类,从而可以使用父类中提供的方法或属性约定3∶类组件必须提供render)方法
  • 约定4 : render()方法必须有返回值,表示该组件的结构

class Hello extends React.component {
render () {
return <div>Hello class Cormponent!</div>}
}
ReactDOM. render (<Hello / >, root)

2.3抽离为独立JS文件

  • 1.创建Hello.js
  • 2在Hello.js 中导入React
  • 3.创建组件(函数或类)
  • 4.在Hello.js中导出该组件
  • 5.在index.js 中导入Hello组件6.渲染组件

3.React 事件处理
3.1事件绑定

  • React事件绑定语法与DOM事件语法相似
  • 语法:on+事件名称={事件处理程序},比如: onClick={0 =>#}注意:React事件采用驼峰命名法,比如: onm ouseEnter、onFocus
  • 在函数组件中绑定事件∶

3.2事件对象

  • 可以通过事件处理程序的参数获取到事件对
  • 象React中的事件对象叫做:合成事件(对象)
  • 合成事件︰兼容所有浏览器,无需担心跨浏览器兼容性问题
function handleclick(e){
e.preventDefault ()
console.log('事件对象',e)
<a onclick={ handleclick}>点我,不会跳转页面</ a>

事件程序抽离

  •     推荐把逻辑抽离到单独的方法中
  •     因为JSX主要以展示UI为主
  •     这点与VUE的模板一致

4.有状态组件和无状态组件
函数组件又叫做无状态组件,类组件又叫做有状态组件
状态( state )即数据
函数组件没有自己的状态,只负责数据展示(静)
类组件有自己的状态,负责更新Ul,让页面“动”起来
比如计数器案例中,点击按钮让数值加1。0和1就是不同时刻的状态,而由0变为1就表示状态发生了变化。状态变化后,UI也要相应的更新。React中想要实现该功能,就要使用有状态组件来完成。
5.组件中的state和setState
5.1 state的基本使用

  • 状态即数据
  • 状态是私有的,只能在组件内部使用通过
  • this.state来获取状态
class Hello extends React.cormponent {//简化语法
state= {count : o}
render () {
return (
<div>有状态组件,{this.state.count}<l div>)
}}

5.2 setState()修改状态

  • ·状态是可变的
  • 语法:this.setState({要修改的数据})
  • 注意:不要直接修改state中的值,这是错误的!!!setState()作用:1.修改state 2.更新U
  • 思想︰数据驱动视图

l/正确
this.setstate({
count: this.state.count + 1})
/错误
this.state.count +=1


state(类组件)

  •     状态即数据,是一个组件内部私有数据,只能在该组件内部使用
  •     state的值是对象,对象内部可以存放多个数据(包括JSX)
  •     它与小程序的state和vue的data类似
  •     setState()
    •         状态是可以被改变的
    •         但是不允许直接改变state的值
    •         该函数有2个作用:修改状态、更新视图
    •         与小程序的语法类似

6.事件绑定解决this 指向问题
1.箭头函数

  • 利用箭头函数自身不绑定this的特点
  •  render()方法中的this为组件实例,可以获取到setState
  • class Hello extends React.component {
    onIncrement() {
    this.setstate( { ... })
    render () {
    //箭头函数中的this指向外部环境,此处为: render()方法return (
    <button onclick={() =>this.onIncrement () }></button>)
    }}
    

2. Function.prototype.bind()
利用ES5中的bind方法,将事件处理程序中的this与组件实例绑定到一起

class Hello extends React.component {
constructor() {
super ()
this.onIncrement = this.onIncrement.bind(this)
心
}
/l ...省略onIncrementrender () {
return (
<button onclick={this. onIncrement} ></ button>)
}}

3. class的实例方法
利用箭头函数形式的class实例方法
注意:该语法是实验性语法,但是,由于babel的存在可以直接使用
1.推荐:使用class的实例方法
class Hello extends React.component {
onIncrement = ()-=>{
this .setstate( { ... })}
}
 

上一篇:十六进制与内存大小对应关系


下一篇:React Native跨平台开发学习笔记