当我们使用
redux
进行数据管理的时候,一般都是在根组件通过Provider
的方式引入store
,然后在每个子组件中,通过connect
的方式使用高阶组件进行连接,这样造成的一个问题是,大量的高阶组件代码冗余度特别高,既然hooks
带来了新特性,不如一起来用用看
目录结构图
1 | ├── otherPage // 其他页面 |
效果图
实现
Test/reducer.jsx
1 | import axios from 'axios'; |
Test/child.jsx
1 | import React, { useContext, useEffect } from 'react'; |
Test/index.jsx
1 | /* eslint-disable react/prop-types */ |
OtherPage/index.jsx
1 | /* eslint-disable react/prop-types */ |
注意点
useEffect()
可以看做是class
写法的componentDidMount
、componentDidUpdate
以及componentWillUnMount
三个钩子函数的组合。- 当返回了一个函数的时候,这个函数就在
compnentWillUnMount
生命周期调用 - 默认地,传给
useEffect
的第一个参数会在每次(包含第一次)数据更新时重新调用 - 当给
useEffect()
传入了第二个参数(数组类型)的时候,effect
函数会在第一次渲染时调用,其余仅当数组中的任一元素发生改变时才会调用。这相当于我们控制了组件的update
生命周期 useEffect()
第二个数组为空则意味着仅在componentDidMount
周期执行一次
- 当返回了一个函数的时候,这个函数就在