用context封装状态管理

这篇具有很好参考价值的文章主要介绍了用context封装状态管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

封装:

context-manager.js文件:

import React from 'react';

export const MyContext = React.createContext(null);

 context封装、自定义函数useboard封装

import React, { useReducer, useContext } from 'react';
import initState from './state' //state初始状态

const myContext = React.createContext();

const initialState = () => {
  return { ...initState }
};
const reducer = (state, action) => {
  return { ...state, ...action }
};

const ContextProvider = props => {
  const [ state, dispatch ] = useReducer(reducer, {}, initialState);
  return (
    <myContext.Provider value={{ state, dispatch }}>
      {props.children}
    </myContext.Provider>
  );
};

const useBoard = () => {
  const contextValue = useContext(myContext);
  return contextValue;
};


export { ContextProvider, useBoard };

state状态存储:文章来源地址https://www.toymoban.com/news/detail-505779.html

const initialState = {
  id: '',
}

export default initialState

业务方调用:

import { ContextProvider } from '$context/reducer';
const Board = (props)=>{
  return (
    <ContextProvider>
      <MyBoard props={{ ...props }}/>
    </ContextProvider>
  )
}

function MyBoard({ props }) {
    const { state, dispatch } = useBoard();
    console.log('state, dispatch ', state, dispatch)
    //...
}

export default Board 
// 业务方使用
import React, { useContext } from 'react';
import { MyContext } from '$context/context-manager';
const { id } = useContext(MyContext);

到了这里,关于用context封装状态管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Node【工具 01】Node Version Manager nvm安装使用(Node.js版本管理工具)

    非专业前端开发工程师在构建项目时遇到如下问题: 懵了,一台电脑安装多个JDK版本我们是常遇到的,前端就不知道怎么处理了,幸亏有了 nvm 。使用它可以简单解决上面的问题: nvm 是 Node.js 的版本管理工具(Node Version Manager)。它允许在同一台计算机上同时安装和管理多个

    2024年02月04日
    浏览(121)
  • react js自定义实现状态管理

    和源码可能不同,我没看过源码,只是实现一下 不足的是,还是需要forceUpdate 实现模块化

    2024年01月18日
    浏览(39)
  • Vue | Vue.js 全家桶 Pinia状态管理

    🖥️ Vue .js专栏:Node.js Vue.js 全家桶 Pinia状态管理 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ 👉 你的一键三连是我更新的最大动力❤️ 目录 一、Pinia和Vuex的对比 什么是Pinia呢? Pina和

    2024年01月16日
    浏览(53)
  • VueSupercharge 精通指南:构建超级状态管理 Vue.js 应用

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 这个状态自管理应用包含以下几个部分: 状态,驱动应用的数据源; 视图,以声明方式将状态映射到视图;

    2024年01月20日
    浏览(40)
  • 从 Context 看 Go 设计模式:接口、封装和并发控制

    在 Go 语言中, context 包是并发编程的核心,用于传递取消信号和请求范围的值。但其传值机制,特别是为什么不通过指针传递,而是通过接口,引发了我的一些思考。 考虑以下典型的代码片段: 这段代码展示了在 Go 中创建和传递 context 的简单用法。但背后的设计理念和实现

    2024年01月20日
    浏览(42)
  • axios 实战进阶练习( axios 封装篇)——基于 Vue3 + Node.js + ElementPlus 实现的联系人列表管理后台的 axios 封装实战

    在之前的文章 axios 实战进阶练习——基于 Vue3 + Node.js + ElementPlus 实现的联系人列表管理后台 中,我们完成了这个 基于 Vue3 + Node.js + ElementPlus 实现的联系人列表管理后台 的项目,其中项目的后端接口是用 Node.js 编写的,通过 axios 来获取接口,所以这篇文章我们来对这个 axi

    2024年02月11日
    浏览(104)
  • 【尚医通】vue3+ts前端项目开发笔记 2 —— 创建项目、封装网络请求、集成elment-plus 、重置样式、准备状态管理/路由 等开发前准备

    服务器地址:http://syt.atguigu.cn 医院接口:http://139.198.34.216:8201/swagger-ui.html 公共数据接口:http://139.198.34.216:8202/swagger-ui.html 会员接口:http://139.198.34.216:8203/swagger-ui.html 短信验证码接口:http://139.198.34.216:8204/swagger-ui.html 订单接口:http://139.198.34.216:8206/swagger-ui.html 文件上传接口:

    2024年02月13日
    浏览(51)
  • Tomcat之服务管理页面manager部署

      Tomcat的管理页面Manager是一个Web应用程序,用于管理Tomcat服务器的部署和操作。它提供了一个易于使用的界面,可以通过Web浏览器访问。Manager可以帮助管理员对Tomcat服务器进行以下操作: 部署/卸载Web应用程序 查看Web应用程序的运行状态和统计信息 启动/停止Web应用程序

    2024年01月18日
    浏览(40)
  • Service Control Manager 服务管理器简介

    在windows驱动开发流程中,写完sys驱动binary之后,为了让OS能够正确的从注册表中读取到对应的信息,并且将其load运行起来,还需要编写inf文件来描述配置驱动文件。不过这也不是必须的,可以通过ServiceControlManager直接创建一个指定驱动binary的Service并且启动。如下code: 而通常

    2024年02月05日
    浏览(31)
  • pycharm管理仓库(Manager Repository)不见了

    经常使用pycharm的大佬们都知道,pycharm中内置了很多库和包,很好用 但是下载来用自带的源很麻烦,于是就用国内的源 可以当我们添加管理仓库的时候,却没有了按钮,如何解决呢? 回到pycharm的主界面,找到图中的Python packages,点击  点击齿轮设置 个别小伙伴使用的是2023版

    2024年01月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包