react 组件

115 阅读2分钟

组件的创建方式

函数创建组件

  • 函数组件:使用JS的函数创建组件

  • 约定1: 函数名称必须以大写字母开头

  • 约定2: 函数组件必须有返回值,表示该组件的结构

  • 如果返回值为null,表示不渲染任何内容

      function Hello() {
        return (
      <div>这是第一个函数组件</div>
     )
     }
     或 const Hello=()=>  <div>这是第一个函数组件</div>
     ReactDOM.render(<Hello />,document.getElementById('root'))
    

类组件(★★★)

  • 使用ES6语法的class创建的组件

  • 约定1:类名称也必须要大写字母开头

  • 约定2:类组件应该继承React.Component父类,从而可以使用父类中提供的方法或者属性

  • 约定3:类组件必须提供 render 方法

  • 约定4:render方法中必须要有return返回值

    class Hello extends React.Component{
      render(){
       return (
         <div>这是第一个类组件</div>
       )
      }
    }
     ReactDOM.render(<Hello />,document.getElementById('root'))
    

React事件处理

事件绑定

  • React事件绑定语法与DOM事件语法相似

  • 语法:on+事件名称=事件处理函数,比如 onClick = function(){}

  • 注意:React事件采用驼峰命名法

类组件中绑定事件函数的时候需要用到this,代表指向当前的类的引用,在函数中不需要调用this

this指向问题

  • 事件处理程序的函数式函数调用方式,在严格模式下,this指向underfined
  • render函数是被组件实例调用的,因此render函数中的this指向当前组件
  • React内部会这样调用: instance.render()
  • 推荐使用箭头函数性的实例方法,来解决this指向问题

State和SetState

state基本使用

 export default class extends React.Component {
   constructor(){
    super()

    // 第一种初始化方式
    this.state = {
        count : 0
    }
 }
 // 第二种初始化方式(推荐)
 state = {
    count:1
 }
 render(){
    return (
        <div>计数器 :{this.state.count}</div>
    )
  }
 }

setState() 修改状态

  • 状态是可变的

  • 语法:this.setState({要修改的数据})

  • 注意:不要直接修改state中的值,这是错误的

  • setState() 作用:1.修改 state 2.更新UI

  • 思想:数据驱动视图

抽取事件处理函数

利用箭头函数形式的class实例方法(推荐)

// 事件处理程序
 onIncrement = () => {
   console.log('事件处理程序中的this:', this)
  this.setState({
  count: this.state.count + 1
  })
 }

表单处理

受控组件

  • 在state中添加一个状态,作为表单元素的value值

  • 给表单元素绑定change事件,将表单元素的值设置为state的值

多表单元素优化

  • 给表单元素添加name属性(用来区分是哪一个表单),名称与state相同(用来更新数据的)

  • 根据表单内容来获取对应值

  • 在change事件处理程序中通过 [name] 来修改对应的state

    inputChange(e){
    let target = e.target;
    let value = target.type == 'checkbox' ? target.checked : target.value;
    this.setState({
      [e.target.name]: value
     })
    }