View in Telegram
πŸš€ Π§Π°ΡΡ‚ΡŒ 2: ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π² Zustand β€” ΠΌΠΈΠ΄Π΄Π»Π²Π°Ρ€Ρ‹ ΠΈ оптимизация ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π΄Ρ€ΡƒΠ·ΡŒΡ! πŸ‘‹ ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с Zustand. Π’ этой части рассмотрим,ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ shallow ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΌΠΈΠ΄Π΄Π»Π²Π°Ρ€Ρ‹. πŸ”Ή Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ `shallow` ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚? По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Zustand сравниваСт значСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ сСлСктором, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ строгого сравнСния (===). Если Π²Ρ‹ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° слоТный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌ Ρ€Π΅Ρ€Π΅Π½Π΄Π΅Ρ€Π°ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаётся Π·Π°Π½ΠΎΠ²ΠΎ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ состояния. shallow Ρ€Π΅ΡˆΠ°Π΅Ρ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ: ΠΎΠ½ выполняСт повСрхностноС сравнСниС ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ массивов. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
import { shallow } from 'zustand/shallow';

const { fieldA, fieldB } = useStore(
  (state) => ({ fieldA: state.fieldA, fieldB: state.fieldB }),
  shallow
);
Π—Π΄Π΅ΡΡŒ: - ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ обновится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° `fieldA` ΠΈΠ»ΠΈ `fieldB` Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ измСнятся. - Если Π΄Ρ€ΡƒΠ³ΠΈΠ΅ поля состояния измСнятся, Ρ€Π΅Ρ€Π΅Π½Π΄Π΅Ρ€Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ shallow? 1. Если Π²Ρ‹ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с нСсколькими свойствами. 2. Для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Ρ€Π΅Ρ€Π΅Π½Π΄Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ с массивами:
const items = useStore((state) => state.items, shallow);
Если измСнится структура ΠΈΠ»ΠΈ порядок элСмСнтов Π² массивС, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ обновится. Но Ссли массив остаётся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… частСй состояния, Ρ€Π΅Ρ€Π΅Π½Π΄Π΅Ρ€ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚. ИспользованиС shallow Π² ΠΏΠ°Ρ€Π΅ с сСлСкторами β€” ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ! πŸ”Ή Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΈΠ΄Π΄Π»Π²Π°Ρ€Ρ‹ Zustand ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠΈΠ΄Π΄Π»Π²Π°Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ ΠΌΠΈΠ΄Π΄Π»Π²Π°Ρ€Ρ‹: 1. devtools: ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. 2. persist: сохранСниС состояния Π² localStorage. 3. immer: ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ нСизмСняСмым состояниСм. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с devtools:
import create from 'zustand';
import { devtools } from 'zustand/middleware';

const useStore = create(
  devtools((set) => ({
    count: 0,
    increment: () => set((state) => ({ count: state.count + 1 })),
  }))
);
ИспользованиС persist:
import create from 'zustand';
import { persist } from 'zustand/middleware';

const useStore = create(
  persist(
    (set) => ({
      count: 0,
      increment: () => set((state) => ({ count: state.count + 1 })),
    }),
    {
      name: 'counter-storage',
    }
  )
);
Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ сСссиями. πŸ”Ή Π Π°Π±ΠΎΡ‚Π° с асинхронными дСйствиями Zustand ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ асинхронныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· set. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…:
const useStore = create((set) => ({
  users: [],
  fetchUsers: async () => {
    const response = await fetch('https://api.example.com/users');
    const data = await response.json();
    set({ users: data });
  },
}));
Π’ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅:
function UserList() {
  const { users, fetchUsers } = useStore();
  useEffect(() => {
    fetchUsers();
  }, [fetchUsers]);

  return (
    <ul>
      {users.map((user) => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}
πŸ”Ή ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ состояния Π² слоТных прилоТСниях Когда ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ становится большС, Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Zustand. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ: 1. РаздСляйтС store Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ нСсколько нСзависимых Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… частСй прилоТСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, auth, UI, Π΄Π°Π½Π½Ρ‹Π΅). ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
const useAuthStore = create((set) => ({
  isAuthenticated: false,
  login: () => set({ isAuthenticated: true }),
}));

const useUIStore = create((set) => ({
  theme: 'light',
  toggleTheme: () =>
    set((state) => ({ theme: state.theme === 'light' ? 'dark' : 'light' })),
}));
2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ context для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ store Для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… прилоТСниях. 🎯 Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Zustand β€” это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ простой state-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€, Π½ΠΎ ΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для слоТных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ сСлСкторы, ΠΌΠΈΠ΄Π΄Π»Π²Π°Ρ€Ρ‹ ΠΈ асинхронныС дСйствия, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с состояниСм. ReactJs Daily | #pro
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Find friends or serious relationships easily