笔记16React-Hooks使用总结

React-Hooks使用总结



React-Hooks简介:react-Hooks是从v16.8引入的新特性。
用以使用函数组件,给予原本没有state、this、生命周期的函数组件以状态、生命周期等功能。
并且推广使用声明式的一种新特性。

hooks带来的改变:
1、声明式:所有声明写在函数开头
2、所有组件都可以是函数组件:更简洁的组件带来性能提升,
且React.memo给予shouldComponentUpdate功能
3、hook给予函数组件状态和声明周期,简化app.js代码冗余嵌套问题
4、原本同块功能的代码逻辑被拆分在不同生命周期,而hook对其进行聚合


React-Hooks主要特性


1、useState:用于保存组件状态,函数组件中没有类组件的this.state,而hooks
通过: const [data,setData]=useState({initialData})来定义状态


2、useEffect处理副作用,模拟生命周期:例如处理异步操作后续步骤如
componentWillUnmount中删除定时器等。useEffect的第一个参数中,我们可以设
置一个回调函数,用于在每次Dom重渲染后执行这个回调;第二个参数我们可以设置
一个空[],这样可以代替在componentDidMount和componentWillUnmount后回调;


3、useContext可以构建以组件为范围的小型redux。解决嵌套的组件传值,调用时
引用context来使用。




useContext使用实践

    ①Context区域:作为其他组件引入的渠道
      import {createContext} from 'react'
      const context = createContext()
      export default context
    ②State区域:封装了状态和方法,类似redux中的action和store的结合:
      1、向外暴露一个state模块(组件可以获取经由Reducer 的最新状态)
      2、引入、关联Context和Reducer,声明初始状态initial_State
      3、const [state,dispatch] = useReducer,关联并获取Reducer
      4、声明方法,状态的改变都需要通过dispatch进行触发,提交到Reducer并返回
      5、返回一个Provider,结合{props.children}回调渲染子组件,用以包裹子路由
        示例:
        const searchUser = async text =>{
          setLoading()
          const res = await axios.get('API',{text})
          dispatch({
            type:AAA, payload:res.data
          })
        } 
        //返回一个Provider
        return ({props.children}
                )
    ③Reducer区域:返回最新的state状态,
      1、引入type类型
      2、向外暴露Reducer
      如:
        switch (action.type){
          case A:return{...state,a:action.payload}
          case B:return{...state,loading:true}
          default:state
        }        
    ④组件中引入useContext:直接引入
      const user = userContext(User)
      const {...} = user.data
      user.func('aaa')等等;