如何在React中使用自定义Hook管理全局状态
在构建React应用时,我们经常需要跨多个组件共享状态。虽然Redux等状态管理库在大型应用中表现出色,但对于小到中等规模的项目来说,它们可能显得过于复杂。在这篇文章中,我将向你展示如何使用React的useState和useContext钩子创建自定义Hook来管理全局状态,同时演示如何有效地执行批量状态更新以防止状态覆盖
创建Context和Provider
首先,我们需要创建一个上下文和一个对应的提供者(Provider)来传递状态。
store 文件夹中定义index.tsx文件
import {
createContext, ReactNode, useContext, useState } from "react";
import {
DefinedState, initState } from "./defined.ts";
/* 定义 SetStateAction */
type SetStateAction = {
[P in keyof DefinedState]?: DefinedState[P];
};
// 定义 context 的类型
interface ContextType {
state: DefinedState;
setState: (action: SetStateAction) => void;
}
// 使用断言定义一个“空”的 context,并赋予后面会使用的类型
const ContextBody = createContext<ContextType>({
} as ContextType);
export function ContentProvider({
children }: {
children: ReactNode }