自动化的hook

这篇博客通过比喻将React Hooks中的useStorage与步枪类型相联系,介绍了如何利用Hooks管理浏览器存储。从半自动化步枪(基础版useStorage)到全自动化步枪(工厂化useStorage),详细展示了代码的优化过程。博客还提供了一些示例代码,演示了如何在React应用中使用这些定制的Hooks。文章最后邀请读者评价,暗示内容深入且实用。
先科普一下,什么是步枪?

就是一把枪!又分半自动化步枪和全自动化步枪。

  • 半自动步枪其实是自动装填,手动击发,说白了就是扣一次扳机打一发子弹。[图-M1卡宾枪]
  • 全自动化步枪其实是自动装填,自动击发,只要扣住扳机子弹就不断发射。[图-AK47]

注意:98K是拉大栓的,还不算半自动呢~
拿前端持久之浏览器存储技术,来写个hook不正确比拟为步枪,这样确实足够抽象,不过威力还是不容小觑,下面就来突突突~

半自动化步枪~

import { useState, useCallback } from 'react'
const useStorage = (key, defaultValue) => {
    const storage = false ? window.localStorage : window.sessionStorage
    const getStorageValue = () => {
        try {
            return defaultValue || storage.getItem(key)
        } catch (err) {
            console.log(err)
        }
        return undefined
    }
    const [value, setValue] = useState(getStorageValue())
    const setStorageValue = useCallback((value) => {
        storage.setItem(key, value)
        setValue(() => {
            return value
        })
    })
    return [value, setStorageValue]
}

export default useStorage

改良版,还是半自动化步枪(就是轻了一点)~

import { useState, useEffect } from 'react'
const useStorage = (key, defaultValue) => {
    const storage = false ? window.localStorage : window.sessionStorage
    const [value, setValue] = useState(
        defaultValue || storage.getItem(key)
    )
    useEffect(() => {
        storage.setItem(key, value)
    }, [key, value])
    return [value, setValue]
}

export default useStorage

这个半自动化步枪,怎么使用呢?

const [id, setId] = useStorage('key', value)

那到底什么是加强版滴~ 全自动化步枪呢?首先,工厂化!

import { useState, useEffect, useCallback, useMemo } from "react";
const useStorage = (key, defaultValue) => {
    const storage = false ? window.localStorage : window.sessionStorage
    const [arg, setArg] = useState({ key: key, value: JSON.parse(defaultValue || storage.getItem(key)) })
    const setStorage = useCallback((key, value) => {
        storage.setItem(key, JSON.stringify(value))
        setArg({ key, value })
    })
    const getStorage = useMemo(key => storage.getItem(key))
    const clearStorage = useCallback(key => {
        storage.removeItem(key)
        setArg(undefined)
    })
    useEffect(() => {
        arg.key && setStorage(arg.key, arg.value)
    }, [arg.key, arg.value])
    return { setStorage, getStorage, clearStorage }
}

export default useStorage

简单易用

const { setStorage, getStorage, clearStorage } = useStorage()

来自业界人士的评分:
在这里插入图片描述
卷子满分60,让我们赴一场满分的约!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值