自定义hooks

2023-12-05

自定义传参hooks

把大多数的通用代码,或者props,抽成一个hooks,用hooks实现上下文,就不用再一一传参了

  1. 实现原理,主要是通过createContext, useContext,生产-消费者模式。用于大量props一层一层传参。
    导入useContext,该函数接受createContext()的返回值,返回的结果为该context的当前值,当前的context值由上层组件中距离当前组件最近的<MyContext.Provider>的value props决定。
  2. hooks实现代码。
import {createContext, useContex} from 'react';
const CanvasContext = createContext(null);
const CanvasProvider = ({children, setProps, setRootCustom, nodes, ...props}) => {
	const selectoRef = useRef(null);
    const movableRef = useRef(null);
    const canvasRef = useRef(null);
    const [targets, setTargets] = useState([]);
    const [boundBool, setBoundBool] = useState(false);
    return (
    <CanvasContext.Provider
            value={{
                selectoRef,
                movableRef,
                canvasRef,
                nodes,
                targets,
                boundBool,
                setTargets,
                setBoundBool,
                ...props,
            }}
        >
            {children}
        </CanvasContext.Provider>)
}

export {CanvasProvider, useCanvas: CanvasContext};
  1. hooks使用代码。给父组件嵌套一层生产者组件,在里面的子组件里面直接使用hooks就可以
function DrawCanva(props) { 
	return (
		<CanvasProvider {...{state, nodes, ...component}}>
           <Canvas/>
        </CanvasProvider>
	)
}
function Canvas() { 
	 const {state, targets, nodes, canvasRef, movableRef, setProps, rootCustom, setRootCustom} = useCanvas();
	 return (
	 <div>
	 	你自己的代码
	 	<ChidComponent />
	 </div>
	 )
}
const ChidComponent  = () => {
	 const {state, targets, nodes, canvasRef, movableRef, setProps, rootCustom, setRootCustom} = useCanvas();
	 return (
	 <div>
	 	你自己的代码
	 </div>
	 )
}

自定义控制浏览器标题hooks

用来控制浏览器标题,暴露设置标题的方法,设置标题之后,通过依赖更新标题

实现原理:保存标题的state

  1. hooks定义代码
import { useState, useEffect } from 'react';

function useTitle(initialTitle) {
  const [title, setTitle] = useState(initialTitle);
 
  useEffect(() => {
    document.title = title;
  }, [title]);

  return setTitle;
}
  1. hooks使用代码
function Page() {
  const setTitle = useTitle('prev title');
 
  return (
    <Button onClick={() => setTitle('test title‘)}>
      Click me
    </Button>
  )
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义hooks 的相关文章

随机推荐

  • 【传输线开路和短路故障】带有集总元件的非对称传输线扩频时域反射测量(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文章讲解
  • 【C++】运算符重载

    加号运算符重载 include
  • BASLER A404K 德国工业相机

    BASLER A404K是一款德国BASLER公司生产的工业相机 通常用于各种工业视觉和图像处理应用 以下是关于BASLER A404K工业相机的详细信息 型号和规格 A404K是该工业相机的型号 通常有特定的规格和配置 如分辨率 帧速率
  • 单目相机测距(3米范围内)二维码实现方案(python代码 仅仅依赖opencv)

    总体思路 先通过opencv 识别二维码的的四个像素角位置 然后把二维码的物理位置设置为 cv Point3f HALF LENGTH HALF LENGTH 0 tl cv Point3f HALF LENGTH HALF LENGTH
  • 在异构系统中学习应用的流迭代分布式编码计算研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • FOXBORO FCP270 P0917YZ控制器模块

    FOXBORO FCP270 P0917YZ控制器模块 FOXBORO FCP270 P0917YZ控制器模块产品详情 FOXBORO FCP270 P0917YZ控制器模块的特点包括 通讯功能 用于在工业自动化系统中实现设备之间的数据通讯
  • selenium IDE自动化测试脚本的实现

    selenium IDE是干什么的 Selenium IDE 是一个简单的录制回放工具 它可以录制你在浏览器上的操作 回放脚本时 它可以重现录制的动作 就好像你又操作了一遍一样 selenium IDE是个浏览器插件 你需要在浏览器上安装该
  • D (1173) : A DS二叉树_合并二叉树

    文章目录 一 题目描述 二 输入与输出 1 输入 2 输出 三 参考代码 一 题目描述 给定两个二叉树 输出这两个二叉树合并后形成的二叉树 依次输出前序遍历 中序遍历 后序遍历 二 输入与输出 1 输入 第一行输入t 表示有t个测试样例 第
  • Ubuntu系统配置深度学习环境之nvidia显卡驱动和cuda安装

    前言 NVIDIA 显卡驱动是为了确保 NVIDIA 显卡能够正确运行而开发的软件 显卡驱动负责与操作系统通信 管理显卡的各种功能 并提供性能优化和兼容性保证 安装适用于特定显卡型号和操作系统版本的最新驱动程序是确保显卡能够正常工作的重要步
  • Redis——Redis简介

    Redis是目前最流行的键值对 key value 数据库 以出色的性能著称 官方提供的数据是可以支持100000以上的 QPS Redis具有高性能的主要原因如下 Redis是基于内存的存储数据库 绝大部分的命令处理只是纯粹的内存操作 内
  • python实现FCFS算法

    先来先服务作业调度算法 import sys 生成一个job class Job def init self task id arrive time run time level self arrive time arrive time s
  • 白噪声下真实正弦波的精确频率估计研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及数据
  • 【故障诊断】基于 KPCA 进行降维、故障检测和故障诊断研究(Matlab代码实现)

    目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 用于轴承故障诊断的性能增强时变形态滤波方法和增强数学形态算子是近年来在轴承故障诊断领域中得到广泛研究和应用的方法 它们能够提高诊断性能 有效地提取轴承故障特征
  • 基于GWO-BP灰狼算法优化BP神经网络多维回归预测(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文档讲解
  • WSL、Aanconda、Linux、Torch环境安装配置等

    文章目录 WSL 参考链接 WSL安装配置 启动本地 下载并安装WSL WSL设置账号密码 WSL路径 多个版本选择 Docker与Anaconda
  • 使用Postman进行接口自动化测试

    我们先思考一下 如果需要达到自动化接口测试的效果 那么我们在基本的模拟请求上还需要做哪些呢 以下我粗略概括为 3 个问题 欢迎更多补充与建议 如何判断接口是否请求成功 如何进行接口批量 定期测试 如何处理依赖接口问题 比如商品下单的接口必须
  • acwing算法提高之动态规划--最长上升子序列模型(上)

    目录 1 基础知识 2 模板 3 工程化 1 基础知识 暂无 2 模板 暂无 3 工程化 题目1 怪盗基德的滑翔翼 有N个数 表示房屋的高度 你可以任意选择一个房屋作为起点 选择朝左飞 或者朝右飞 必须严格递减才能够飞到下一个房屋 求经过的
  • 如何安装多个版本Node之NVM

    nvm 最近准备开始学习vite 发现最低需要18 版本的node 奈何手上有些旧项目无法使用高版本node 所以出现了使用多版本node的需求 所以search了一下教程 这边只是一个自己的记录 一 nvm下载 前往github下载 nv
  • 想要零基础成为一个黑客,就按照这个路线来!

    前几天一个同学在聊天中提到毕业后想要从事网络安全方向的工作 虽然他本身也是学计算机的 但是又怕心有余而力不足 因为 从事网络安全方面的工作向来起点都比较高 大学里少有开设这类课程的 在学校能够学到的知识比较有限 网上的关于这方面课程的质量又
  • 自定义hooks

    自定义传参hooks 把大多数的通用代码 或者props 抽成一个hooks 用hooks实现上下文 就不用再一一传参了 实现原理 主要是通过createContext useContext 生产 消费者模式 用于大量props一层一层传参