Налаштування State Management (Jotai) для React-застосунку

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування State Management (Jotai) для React-застосунку
Проста
від 4 годин до 2 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Настройка State Management (Jotai) для React-додатку

Jotai будує estado з атомів — маленьких ізольованих одиниць, які можна комбінувати. Найближча аналогія — Recoil, але без boilerplate та з кращою підтримкою TypeScript з коробки. Компонент підписується тільки на ті атоми, які читає, та ре-рендерится тільки при їх змінені.

Добре підходить для додатків з великою кількістю незалежних кусків estado: форм, UI-estado, кеш запитів.

Що входить у роботу

Настройка атомарної структури estado під проект: базові атоми, похідні атоми, async атоми, інтеграція з React Suspense, підключення devtools, організація файлів.

Встановлення

npm install jotai
# опціонально — утиліти
npm install jotai-devtools

Базові атоми

import { atom, useAtom, useAtomValue, useSetAtom } from 'jotai'

// примітивний атом
export const countAtom = atom(0)

// похідний атом (readonly)
export const doubleCountAtom = atom((get) => get(countAtom) * 2)

// похідний атом з записом
export const incrementAtom = atom(
  (get) => get(countAtom),
  (get, set, step: number = 1) => set(countAtom, get(countAtom) + step)
)
function Counter() {
  const [count, setCount] = useAtom(countAtom)
  const double = useAtomValue(doubleCountAtom)
  const increment = useSetAtom(incrementAtom)

  return (
    <div>
      <span>{count} (×2 = {double})</span>
      <button onClick={() => increment(1)}>+1</button>
      <button onClick={() => setCount(0)}>Скид</button>
    </div>
  )
}

useAtomValue — підписка тільки на чтення, не повертає сеттер. useSetAtom — тільки сеттер, компонент не ре-рендерится при змінені атому.

Async атоми та Suspense

import { atom } from 'jotai'

const userIdAtom = atom<number | null>(null)

// async похідний атом
export const userAtom = atom(async (get) => {
  const id = get(userIdAtom)
  if (!id) return null
  const res = await fetch(`/api/users/${id}`)
  if (!res.ok) throw new Error('Користувач не знайден')
  return res.json() as Promise<User>
})
// Компонент обгорнений в Suspense
function UserProfile() {
  const user = useAtomValue(userAtom) // suspend до завантаження
  if (!user) return <p>Виберіть користувача</p>
  return <p>{user.name}</p>
}

function App() {
  return (
    <Suspense fallback={<Spinner />}>
      <ErrorBoundary fallback={<Error />}>
        <UserProfile />
      </ErrorBoundary>
    </Suspense>
  )
}

Терміни

Базова настройка Jotai — 1–2 години. Інтеграція async атомів з Suspense — 2–3 години. Складне дерево estado з похідними атомами — 1 день.