4.useReducer+useContext+createContext的使用、模拟redux合并reducer
注意:hooks只能在函数(无状态组件)中使用
createContext:一个创建上下文函数,执行产生一个上下文对象,包含两个属性,Provider组件和Consumer组件
Provider:用来包裹整合组件,传递一个value属性,把context上下文注入到整个组件当中
Consumer组件,在里面使用函数调用Provider的value传递的值成形参,并取出使用
具体:官方createContext介绍
useReducer和useContext - Hooks Api链接
useReducer和useContext也不过多介绍了,了解的话可以去官方查看即可,下面直接上代码
4.1useReducer+useContext+createContext的简单使用,创建一个Test.tsx文件
import React, {
useReducer, useContext, createContext, Context } from 'react';
//初始化stroe的类型、初始化值、reducer
const ADD_COUNTER = 'ADD_COUNTER';
const initialReucer = {
count: 100
}
function reducer(state: typeof initialReucer, action: {
type: typeof ADD_COUNTER }) {
switch (action.type) {
case ADD_COUNTER:
return {
...state, count: state.count + 1 }
default:
return state;
}
}
const ProviderContext: Context<any> = createContext('provider');//创建上下文实例
//高阶组件,给函数组件注入上下文
const providerHoc = (reducer: Function, initialState: any) => (Com: React.FC<any>) => {
return () => {
const [state, dispatch] = useReducer<any>(reducer, initialState);
return (
<ProviderContext.Provider value={
{
state, dispatch }}>
<Com />
</ProviderContext.Provider >
);
}
}
function Test(): JSX.Element {
const