zoukankan      html  css  js  c++  java
  • React Hooks之useState、useEffect使用

    2019年React Hooks是React生态圈里边最火的新特性了。它改变了原始的React类的开发方式,改用了函数形式;它改变了复杂的状态操作形式,让程序员用起来更轻松;它改变了一个状态组件的复用性,让组件的复用性大大增加。

    State Hook(useState):

      state hook最主要的作用是获取需要的state和更新state方法。

      使用方法:const [state, setState] = useState(initialState);

      与原来未使用hooks方法对比:

    // 原来Class写法
    import React, { Component } from 'react'
    
     class Eaxmple extends Component {
       constructor (props) {
         super (props) 
         this.state={count:0}
       }
      render() {
        return (
          <div>
            <p>总数:{this.state.count}</p>
            <button onClick={this.add.bind(this)}>增加</button>
          </div>
        )
      }
      add() {
        this.setState({count:this.state.count+1})
      }
    }
    export default Eaxmple
    // react hooks写法
    import React,{useState} from 'react'
    
    const EaxmpleHooks = () => {
      const [ count , setCount ] =useState(0)//数组解构
      return (
        <div>
           <p>总数:{count}</p>
            <button onClick={()=>setCount(count+1)}>增加</button>
        </div>
      )
    }
    export default EaxmpleHooks

      相比而言,简洁明了了许多。

    Effect Hook(useEffect):

      useEffect方法是在每次渲染之后执行,可以理解为class写法中的componentDidMount / componentDidUpdate / componentWillUnmount(不完全一样)。

      使用方法:useEffect(() => {}, []);

      使用条件:useEffect的第二个参数是一个数组,只有当数组中的的值发生改变的时候才会调用effect,如果执行在第一次挂载和卸载的时候调用,只需要传一个[]。

      与原来未使用hooks方法对比:

    // 原来Class写法
    import React, { Component, useState } from 'react'
    
    class Eaxmple extends Component {
      constructor (props) {
        super (props) 
        this.state={count:0}
      }
      componentDidMount() {
        console.log(`componentDidMount => clicked ${this.state.count}`);
      }
      componentDidUpdate() {
        console.log(`compomentDidUpdate  => clicked ${this.state.count}`);
      }
      componentWillUnMount() {
        console.log(`componentWillUnMount => clicked ${this.state.count}`);
      }
    
      render() {
        return (
          <div>
            <p>总数:{this.state.count}</p>
            <button onClick={this.add.bind(this)}>增加</button>
          </div>
        )
      }
      add() {
        this.setState({count:this.state.count+1})
      }
    }
    export default Eaxmple
    // react hooks写法
    import React,{useState, useEffect} from 'react'
    
    const EaxmpleHooks = () => {
      const [ count , setCount ] =useState(0)//数组解构
      useEffect(() => {
        console.log(`clicked ${count}`);
      });
    
      // 传入[]参数,只执行一次
      // useEffect(() => {
      //   console.log(`clicked ${count}`);
      // }, []);
    
      // 监控count变化,一旦变化立即执行
      // useEffect(() => {
      //   console.log(`clicked ${count}`);
      // }, [count]);
    
      // 数据解绑销毁
      // useEffect(() => {
      //   console.log(`我来了...`);
      //   return () => {
      //     console.log(`我走了...`); 
      //   }
      // }, []);
    
      return (
        <div>
           <p>总数:{count}</p>
            <button onClick={()=>setCount(count+1)}>增加</button>
        </div>
      )
    }
    export default EaxmpleHooks

    React Hooks 使用起来非常的简单,上面我们就写使用 useState和useEffect函数组件对比。

  • 相关阅读:
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale
    CodeForces 785B Anton and Classes
    CodeForces 785A Anton and Polyhedrons
    爱奇艺全国高校算法大赛初赛C
    爱奇艺全国高校算法大赛初赛B
    爱奇艺全国高校算法大赛初赛A
    EOJ 3265 七巧板
    EOJ 3256 拼音魔法
    EOJ 3262 黑心啤酒厂
  • 原文地址:https://www.cnblogs.com/a-cat/p/13403182.html
Copyright © 2011-2022 走看看