State management - Jotai
Description
This starter comes with jotai state management tool. Please check documentation on how it work in details:
Examples
Create atom
import { atom } from 'jotai'
export const isSignedInAtom = atom<boolean | null>(null)
export const userAtom = atom<User | null>(null)
export const userNameAtom = atom<string | null>((get) => {
  const user = get(userAtom)
  const userName = user.userName
  return userName
})
Get atom value
Get with hook
import { useAtomValue } from 'jotai'
import { isSignedInAtom, userNameAtom } from '@/store/auth'
export const UserName = () => {
  const isSignedIn = useAtomValue(isSignedInAtom)
  const userName = useAtomValue(userNameAtom)
  if (isSignedIn) {
    return <Text>{userName}</Text>
  }
  return <Text>No user</Text>
}
Get outside of component
import { store } from '@/store'
import { isSignedInAtom, userNameAtom } from '@/store/auth'
const getUserName = () => {
  const isSignedIn = store.get(isSignedInAtom)
  const userName = store.get(userNameAtom)
  if (isSignedIn) {
    return userName
  }
  return null
}
Update atom value
Update with hook
import { isSignedInAtom } from '@/store/auth'
const SignInButton = () => {
  // Optionbally you can use `useSetAtom()`
  const [isSignedIn, setIsSignedIn] = useAtom(isSignedInAtom)
  const handleSignIn = () => {
    // Handle logic on backend
    setIsSignedIn(true)
  }
  if (isSignedIn) {
    return null
  }
  return <Button onPress={handleSignIn}>Sign in</Button>
}
Update outside of component
import { store } from '@/store'
import { isSignedInAtom } from '@/store/auth'
const handleSignIn = () => {
  // Handle logic on backend
  store.set(isSignedInAtom, true)
}
const SignInButton = () => {
  const isSignedIn = useAtomValue(isSignedInAtom)
  if (isSignedIn) {
    return null
  }
  return <Button onPress={handleSignIn}>Sign in</Button>
}