如果T
是string | undefined
,则不需要json解析,而是返回字符串本身。我该如何实施?
import { useEffect, useState, Dispatch, SetStateAction } from 'react'
type SetValue<T> = Dispatch<SetStateAction<T>>
export default function useLocalStorage<T>(
key: string,
fallbackValue: T
): [T, SetValue<T>] {
const [value, setValue] = useState<T>(() => {
console.log('key', key)
if (typeof localStorage !== 'undefined') {
const stored = localStorage.getItem(key)
console.log('stored', stored)
return stored ? JSON.parse(stored) : fallbackValue // <-- here
} else {
return fallbackValue
}
})
useEffect(() => {
if (typeof localStorage !== 'undefined' && value) {
localStorage.setItem(key, JSON.stringify(value))
}
}, [key, value])
return [value, setValue]
}
2条答案
按热度按时间fnx2tebb1#
m3eecexj2#
你需要一个类型 predicate :
我们可以添加到你的条件:
TSPlayground