Skip to content

Instantly share code, notes, and snippets.

@crazy4groovy
Last active November 4, 2022 20:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save crazy4groovy/6dbdd61354b4597bf12f4c5b8e3a9ffb to your computer and use it in GitHub Desktop.
Save crazy4groovy/6dbdd61354b4597bf12f4c5b8e3a9ffb to your computer and use it in GitHub Desktop.
context + hook pattern (ReactJS)
import { UserProvider } from "./context"
import { Component } from "./component"
export default function App() {
return (
<UserProvider>
<h1>Context App</h1>
<Component />
<br />
<Component />
</UserProvider>
)
}
import { useUser } from "./hook"
export function Component() {
const { name, setName } = useUser()
const onClick = () =>
setName(Math.random().toString().slice(2))
return <button onClick={onClick}>{name}</button>
}
import { createContext, useState } from "react"
const useUserInit = (_name = "unknown") => {
const [name, setName] = useState(_name)
return { name, setName }
}
export const UserContext = createContext({})
export function UserProvider({ children }) {
const user = useUserInit()
return (
<UserContext.Provider value={user}>
{children}
</UserContext.Provider>
)
}
export function TestUserProvider({ children, value }) {
return (
<UserContext.Provider value={value}>
{children}
</UserContext.Provider>
)
}
export function TestContextProvider({ children, Context, value }) {
return (
<Context.Provider value={value}>
{children}
</UserContext.Provider>
)
}
import { useContext } from "react"
import { UserContext } from "./context"
export const useUser = () => useContext(UserContext)
@crazy4groovy
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment