19
loading...
This website collects cookies to deliver better user experience
useState
the state of that handler changes but is not persistent once the page re-renders. TextVisibleProvider.tsx
import React, { useContext, ReactNode } from 'react'
import useLocalStorageState from 'use-local-storage-state'
type TextContextType = {
isTextVisible: boolean
setTextVisible: () => void
}
const TextContext = React.createContext<TextContextType>({
isTextVisible: false,
setTextVisible: () => {
console.log('is text visible')
},
})
export const useTextVisible = () => useContext(TextContext)
useLocalStorageState
replaces the useState
hook. We have a key text-storage
and the initial state which is false. Inside the provider you can create any function that will change the state in that case the handleTextVisibility
.const TextProvider = ({ children }: { children: ReactNode }) => {
const [isTextVisible, setTextVisible] = useLocalStorageState(
'text-storage',
false,
)
const handleTextVisibility = () => {
if (!isTextVisible) {
setTextVisible(true)
}
}
return (
<TextContext.Provider
value={{ setTextVisible: handleTextVisibility, isTextVisible }}
>
{children}
</TextContext.Provider>
)
}
export default TextProvider
TextVisible.tsx
const TextVisible = (): JSX.Element => {
const { isTextVisible, setTextVisible } = useTextVisible()
return (
<div>
{!isTextVisible && (
<div>
<p>
This website is using cookies to enhance the user experience.
</p>
<button
onClick={() => setTextVisible()}
>
I accept
</button>
</div>
)}
</div>
)
}
export default TextVisible
TextProvider
on level higher than the component that we just made or it could be on an index file.