TGViewer
Free React For Beginners Free React For Beginners @reactbeginners · 3.04K subscribers
Post #535 1.4K
Не популярні корисні хуки в React (3/3)

const userName = useSyncExternalStore(
userStore.subscribe,
() => userStore.userName
);


❤️Можливість мати стор окремо від компоненту без зайвих бібліотек (топ штука, але вже пізно)❤️

function UserEditor() {
const userName = useSyncExternalStore(
userStore.subscribe,
() => userStore.userName
);
return (
<>
<h1>Hello {userName}</h1>
<input onChange={(e) => userStore.setUserName(e.target.value)} />
</>
);
}



class ExternalStore {
private _listeners: (() => void)[] = [];
constructor(private readonly _user: User) {}

get userName() {
return this._user.name;
}

setUserName = (name: string) => {
this._user.name = name;
this._listeners.forEach((l) => l());
};

subscribe = (listener: () => void) => {
this._listeners.push(listener);
return () => (this._listeners = this._listeners.filter(listener));
};
}


Деталі: Хук дозволяє підписатися на зміни в об'єктах, які знаходиться поза межами React. Два важливі моменти: 1) Функція subscribe зобов'язана повертати функцію відписки. 2) Функція, яка отримує дані, має повертати нові значення виключно якщо ті були змінені. Повернення НОВОГО об'єкту на кожен виклик призведе до помилки.

Сторонній ефект: На вас будуть дивно дивитися, бо це ж не канонічно.
Документація

@reactbeginners
  • 👍 17
  • ❤ 5
  • 🔥 3
More from @reactbeginners
  1. Sep 29, 2026Як і обіцяв - про БЗВП по свіжих слідах (і заодно про процес). У знайомого злетіло бронюва…
  2. Sep 26, 2026Думаю багатьом буде цікаво щось дізнатися про розробоку в ЗСУ Спробою розповісти трохи тог…
  3. Sep 24, 2026Всім привіт. Давно не бачилися, але до телеграму руки все ніяк не доходили. В лінкедині я…
  4. May 24, 2026Київ, співчуваю. Сам сьогодні в цю ніч був на лукьянівці. Як на мене, найважча ніч за всі.…
  5. Dec 31, 2025З новим Роком. Нехай це буде останній рік війни. А росія нехай отримує те на що заслужила.…
  6. Nov 29, 2025Сподіваюся всі живі. Схоже що це був рекордний наліт. Як бачите - путін не зацікавлений в…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →