Что учитываешь при выборе стейт менеджера для проекта

Ответ

При выборе стейт-менеджера учитываю:

  1. Размер проекта - для малых подходят Context API или Zustand, для сложных - Redux/MobX
  2. Сложность состояния - если много связанных данных, нужен Redux с нормализацией
  3. Производительность - важно для частых обновлений (Jotai/Recoil лучше для атомарного состояния)
  4. Опыт команды - если все знают Redux, возможно не стоит внедрять новый
  5. DevTools - Redux имеет лучшие инструменты отладки
  6. Серверное состояние - для API лучше React Query/SWR

Пример для простого состояния:

// Zustand
const useStore = create(set => ({
  count: 0,
  increment: () => set(state => ({ count: state.count + 1 }))
}))

Ответ 18+ 🔞

А вот это, блядь, тот самый момент, когда начинаешь выбирать стейт-менеджер, а в итоге понимаешь, что нихуя не понимаешь, какой из них в рот мне чих-пых. Слушай, давай по полочкам, а то мозг сейчас ебнет.

Первое, на что смотришь — это размер проекта. Если у тебя там три кнопки и форма для ввода имени кота, то зачем тебе, блядь, этот монстр Redux? Ты его развернёшь, настроишь, а потом будешь с ним нянчиться, как с младенцем, который орет по ночам. Для таких мелочей — Context API или, там, Zustand, он как раз для таких шустрых проектов, где не хочется ебаться с тоннами кода.

Дальше — сложность состояния. Если у тебя там данные пляшут друг с другом, как пьяные на свадьбе, и всё взаимосвязано, то да, Redux с его нормализацией — твой выбор. Но если ты попробуешь запихнуть это в обычный стейт компонента, то получишь пиздец, извини за выражение. Будешь потом ловить баги, как дурак, и удивляться, почему всё сломалось.

Производительность — это вообще отдельная песня. Если у тебя каждую секунду что-то обновляется, как курс биткоина, то тебе не подойдет что попало. Тут уже смотри в сторону Jotai или Recoil, они заточены под атомарное состояние, чтобы не перерисовывать всю хуйню, а только то, что нужно. Иначе пользователь будет ждать, пока твоё приложение подумает, и уйдет к конкурентам, блядь.

Опыт команды — это важно, ёпта. Если все твои ребята десять лет пишут на Redux и знают его, как свои пять пальцев, то зачем им новый инструмент? Они его освоят, конечно, но зачем тратить время и нервы? Лучше использовать то, что уже знают, чтобы не получилось, как в той поговорке: заставь дурака богу молиться, он и лоб расшибет.

DevTools — это святое. Redux, конечно, тут король, у него инструменты отладки — просто овердохуища. Ты можешь смотреть, что происходит с состоянием, откатывать действия, как в игре, и вообще чувствовать себя богом. Если тебе это важно, то Redux — твой выбор.

И последнее — серверное состояние. Если ты постоянно дергаешь API, то не надо, блядь, городить огород с тем же Redux. Возьми React Query или SWR, они специально для этого созданы. Они тебе и кэширование сделают, и рефетчнут данные, когда нужно, и вообще жизнь упростят. Не изобретай велосипед, а то получится, как всегда: потратишь кучу времени, а в итоге — хуй с горы.

Ну и примерчик для наглядности, чтобы ты не думал, что я тут просто языком чешу:

// Zustand
const useStore = create(set => ({
  count: 0,
  increment: () => set(state => ({ count: state.count + 1 }))
}))

Вот, видишь? Просто, понятно и без лишней ебли. Выбирай с умом, а то потом будешь, как тот Герасим, только говорить «Муму» и кидать мешки в озеро от безысходности.