初步了解hooks用法

了解 react hooks

React hooks在16.7的测试版到16.8的正式上线以后到现在的火热。可以看出react hooks新特性的功能是效果绝佳的,而这种模式也被Vue3.0所参考。
React hooks的出现使函数式组件也可以像类组件一样拥有类似生命钩子一样的概念。扩大函数式组件的应用范围。

react hooks钩子介绍

首先总结react hooks中有哪些钩子:

  • `useState、useEffect、useContext`
    
  • `useRef、useReducer、useCallback、useMemo`
    
  • `useLayoutEffect、useDebugValue、useImperativeHandle`
    
react hooks钩子使用

useState 举个栗子

import React, {Fragment, useState} from 'react';

function Index() {
    const [count, setCount] = useState(0)
    const [color, setColor] = useState('blue')
    return (
    <Fragment>
        <div style={{color}}>统计数: {count}</div>
        <button onClick={()=> setCount(count+1)}>add</butto>
        <button onClick={()=> setColor('pink')}>color</butto>
    </Fragment>
    )
}

export defualt Index;

// 上述栗子中,当我们点击按钮会让count+1 以及 将div中的字体颜色变成粉色。useStata()其实就是结构赋值,括号中接受初始化参数,第一个参数接受值, 第二个则是一个方法,通过去调用传一个参数来改变他。


useEffect 举个栗子

import React, {Fragment, useState, useEffect} from 'react';
import { BrowserRouter as Router, Route, Link } from "react-router-dom"

function Index() {   
    useEffect(()=>{        
        console.log('进入Index');        
            return () => {           
                console.log('离开Index');        
             }    
     });    
     return <h2>这是一个Index</h2>;
}

function List() {   
    useEffect(()=>{        
        console.log('进入List');        
            return () => {           
                console.log('离开List');        
             }    
     });    
     return <h2>这是一个List</h2>;
}

function App() {
    const [count, setCount] = useState(0)
    const [color, setColor] = useState('blue')

    useEffect(()=> {
        console.log(count)
        return (
          console.log('我离开了')
        )
    })
}   

return (
    <Fragment>
        <div style={{color}}>统计数: {count}</div>
        <button onClick={()=> setCount(count+1)}>add</butto>
        <button onClick={()=> setColor('pink')}>color</butto>

        <Route>
            <ul>
                <li>
                    <Link to='/'>首页</Link>
                </li>
                <li>    
                    <Link to='/list/'>LIST</Link>
                </li>
            </ul>
            <Route path='/' exact component={Index}/>
            <Route path='/list/' exact component={List}/>
        </Route>
    </Fragment>
)
}

export defualt App;

上述栗子中,当你在点击改变 useState定义的参数时, 你会发现在不停的打印count是因为, useEffect()类似类组件中 componentDidMountcomponentDidUpdate的概念。所以当你在点击切换路由第一次加载完成会提示进入XX,根据上述代码您大致也猜到了在useEffect中return(注意:必须返回的是一个函数/方法)其实也就是类似类组件中componentWillUnmount的概念。
useState第一个参数拥有类似类组件三个钩子概率同时,它还有第二个参数需要传一个数组,来指定哪些参数改变以后才会触发。如果不传那么不管改变了那个useState的参数都会触发useEffect


useContext 举个栗子

在使用useContext时 这次您需要多现引入createContext
那么我因为我没有分成两个文件来写栗子但实际开发中肯定是分成两个文件那么这里会和下面代码稍有不同
首先在使用useContext时需要先创建
export const appContext = createContext({});
暴露出这个变量 在另一个页面中来使用所以还需import引入

import React, {Fragment, useState, useEffect} from 'react';
import { BrowserRouter as Router, Route, Link } from "react-router-dom"

const appContext = createContext({});

function Index() {
    let { count, color} = useContext(appContext);
    useEffect(()=>{        
        console.log('进入Index');        
            return () => {           
                console.log('离开Index');        
             }    
     });    
     return <h2>这是一个Index, 父组件中的计数:{count}</h2>;
}

function List() {   
    useEffect(()=>{        
        console.log('进入List');        
            return () => {           
                console.log('离开List');        
             }    
     });    
     return <h2>这是一个List</h2>;
}

function App() {
    const [count, setCount] = useState(0)
    const [color, setColor] = useState('blue')

    useEffect(()=> {
        console.log(count)
        return (
          console.log('我离开了')
        )
    })
}   

return (
    <Fragment>
        <div style={{color}}>统计数: {count}</div>
        <button onClick={()=> setCount(count+1)}>add</butto>
        <button onClick={()=> setColor('pink')}>color</butto>

        <Route>
            <ul>
                <li>
                    <Link to='/'>首页</Link>
                </li>
                <li>    
                    <Link to='/list/'>LIST</Link>
                </li>
            </ul>
            <Route path='/' exact component={Index}/>
            <Route path='/list/' exact component={List}/>
        </Route>
        // 显示子组件
        <appContext.Provider value={{count, color}}>
            <Index/>
        </appContext>
    </Fragment>
)
}

export defualt App;

useContext主要功能其实就是父子组件之间的通信

由于工作原因后面内容, 他日有缘在补。emmmmmm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值