如何写一个react自定义的hooks?

这篇具有很好参考价值的文章主要介绍了如何写一个react自定义的hooks?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用过useState,也使用过ahook的useSetState,我们知道useState和useSetState左边赋值的第一个参数是接收初始值的变量和设置变量的方法,这里左边用的是数组解构实现的。所以,这里我们想一下,如何自定义一个hooks,也可以像useState和useSetState那样呢?

[a, setA] = useState();

按我个人的理解,react自定义hooks其实就是个函数,函数里可以使用useState、useSetState、useEffect,可以任意返回结果。下面我们以hooks的useBoolean为例,我写一个hooks。

1.写一个hooks


import {useEffect, useState} from 'react';

function useBoolean(b: boolean = true): any {
  const [B, setB] = useState(false);
  const toggle = () => setB(!B);
  const set = () => setB(b);
  const setTrue = () => setB(true);
  const setFalse = () => setB(false);
  useEffect(() => {
    setB(b);
  }, []);
  return [B, { toggle, set, setTrue, setFalse }];
};

export default useBoolean;

我们定义一个useBoolean的函数,函数使用useState定义一个B变量和setB方法用于改变状态,给B赋一个初始值false,在useEffect里设置调用useBoolean时赋的值,然后返回一个数组,数组的值分别是B变量,包含toggle, set, setTrue, setFalse等设置B变量的方法。至此,一个简单的hooks就实现了。

2.使用

const [B, { toggle, set, setTrue, setFalse }] = useBoolean();
console.log(B, new Date().getTime())

这里调用useBoolean,然后输出B变量,会发现B变量输出了两次,问题出在哪呢?原来是useBoolean hooks里的useEffect赋了值导致的。所以我们改进一下,注释掉useEffect,把const [B, setB] = useState(false);改成const [B, setB] = useState(b);,不使用useEffect去赋B变量初始值了。文章来源地址https://www.toymoban.com/news/detail-840184.html

import {useEffect, useState} from 'react';

function useBoolean(b: boolean = true): any {
  const [B, setB] = useState(b);
  const toggle = () => setB(!B);
  const set = () => setB(b);
  const setTrue = () => setB(true);
  const setFalse = () => setB(false);
  // useEffect(() => {
  //   setB(b);
  // }, []);
  return [B, { toggle, set, setTrue, setFalse }];
};

export default useBoolean;

到了这里,关于如何写一个react自定义的hooks?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • react使用hook封装一个tab组件

    2024年02月09日
    浏览(47)
  • 【前端知识】React 基础巩固(四十六)——自定义Hook的应用

    自定义Hook本质上只是一种函数代码逻辑的抽取,严格意义上而言,它并不算React的特性。 实现组件创建/销毁时打印日志 实现Context共享 封装 TokenContext 和 UserContext 两个Context在自定义Hook useUserToken 中,通过使用 userUserToken 同时获取两个Context的内容: 实现获取滚动位置 封装滚

    2024年02月14日
    浏览(47)
  • react实现模拟弹框遮罩的自定义hook

    点击按钮用于检测鼠标是否命中按钮 React好玩的自定义hook-useClickOutSide_哔哩哔哩_bilibili

    2024年02月12日
    浏览(43)
  • react实现对数组做增删改操作自定义hook

    实现对数组的增删改操作。 React好玩的自定义hook-useArray_哔哩哔哩_bilibili

    2024年02月12日
    浏览(35)
  • react18 hooks自定义移动端Popup弹窗组件RcPop

    基于 React18 Hooks 实现手机端弹框组件 RcPop react-popup 基于 react18+hook 自定义多功能弹框组件。整合了 msg/alert/dialog/toast及android/ios 弹窗效果。支持 20+ 自定义参数、 组件式+函数式 调用方式,全方位满足各种弹窗场景需求。 在需要使用弹窗的页面引入组件。 RcPop支持  组件式+函

    2024年02月15日
    浏览(43)
  • react Hook+antd封装一个优雅的弹窗组件

    前言 在之前学vue2的时候封装过一个全局的弹窗组件,可以全局任意地方通过this调用,这次大创项目是用react技术栈,看了一下项目需求,突然发现弹窗还是比较多的,主要分为基础的弹窗以及form表单式的弹窗,如果只是无脑的去写代码,那些项目也没啥必要了。正好react和

    2024年02月13日
    浏览(41)
  • React 通过一个输入内容加入列表案例熟悉 Hook 基本使用

    我们创建一个react项目 在src下创建components文件夹 在下面创建一个index.jsx index.jsx 参考代码如下 首先 我们通过一个比较典型的方法定义了一个用于声明表单元素绑定响应式数据的的函数useInputValue 接收一个参数 用于做响应式数据的默认值 然后暴露他的value 同时 绑定了一个o

    2024年02月09日
    浏览(48)
  • ahooks.js:一款强大的React Hooks库及其API使用教程(一)

    ahooks是一款由阿里巴巴开发团队设计的React Hooks库,提供了一系列实用的React Hooks,以便开发者更好地使用React的功能。ahooks的设计原则是“最小API,最大自由”,旨在提供最小的、最易于理解和使用的API,同时保留最大的使用自由度。 使用npm或yarn安装ahooks: 1. useRequest useR

    2024年02月12日
    浏览(33)
  • ahooks.js:一款强大的React Hooks库及其API使用教程(四)

    ahooks是一款由阿里巴巴开发团队设计的React Hooks库,提供了一系列实用的React Hooks,以便开发者更好地使用React的功能。ahooks的设计原则是“最小API,最大自由”,旨在提供最小的、最易于理解和使用的API,同时保留最大的使用自由度。 使用npm或yarn安装ahooks: API介绍合集:

    2024年02月11日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包