react Hooks

技术胖博客

React Hooks

类与Hooks 写法对比

先来写一个最简单的有状体组件,点我们点击按钮时,点击数量不断增加。
原始写法:

import React, { Component } from 'react';

class Example extends Component {
    constructor(props) {
        super(props);
        this.state = { count:0 }
    }
    render() { 
        return (
            

You clicked {this.state.count} times

); } addCount(){ this.setState({count:this.state.count+1}) } } export default Example;

React Hooks 写法:

import React, { useState } from 'react';
function Example(){
    const [ count , setCount ] = useState(0);
    return (
        

You clicked {count} times

) } export default Example;

React Hooks不能出现在条件判断语句中

因为它必须有完全一样的渲染顺序

错误示范:

import React, { useState } from 'react';
let showSex = true
function Example2(){
    const [ age , setAge ] = useState(18)
    if(showSex){
        const [ sex , setSex ] = useState('男') // 不可在判断语句中使用useState
        showSex=false
    }

    const [ work , setWork ] = useState('前端程序员')
    return (
        

JSPang 今年:{age}岁

性别:{sex}

工作是:{work}

) } export default Example2;

useEffect

useEffect函数来代替生命周期函数

在使用React Hooks的情况下,我们可以使用下面的代码来完成上边代码的生命周期效果,代码如下(修改了以前的diamond): 记得要先引入useEffect后,才可以正常使用。

import React, { useState , useEffect } from 'react';
function Example(){
    const [ count , setCount ] = useState(0);
    //---关键代码---------start-------
    useEffect(()=>{
        console.log(`useEffect=>You clicked ${count} times`)
    })
    //---关键代码---------end-------

    return (
        

You clicked {count} times

) } export default Example;

useEffect两个注意点

  1. React 首次渲染 和之后的 每次渲染 都会调用一遍useEffect函数,而之前我们要用两个生命周期函数分别表示首次渲染(componentDidMonut)和更新导致的重新渲染(componentDidUpdate)。

  2. useEffect中定义的函数的执行不会阻碍浏览器更新视图,也就是说这些函数时 异步执行 的,而componentDidMonutcomponentDidUpdate中的代码都是同步执行的。个人认为这个有好处也有坏处吧,比如我们要根据页面的大小,然后绘制当前弹出窗口的大小,如果时异步的就不好操作了。

useEffect实现componentWillUnmount

useEffect的第二个参数,它是一个数组,数组中可以写入很多状态对应的变量,意思是当状态值发生变化时,我们才进行解绑。但是当传空数组[]时,就是当组件将被销毁时才进行解绑,这也就实现了componentWillUnmount的生命周期函数。

function Index() {
    useEffect(() => {
        console.log('Index页面数据有变')
        return () => {
            console.log('组件解绑')
        }
    },[]) // 第二个参数为空数组,组件将被销毁时才进行解绑
    return 

Index

; }

你可能感兴趣的:(react Hooks)