bebyk написав:FakiNyan написав:пояснити за redux
Багато разів зустрічав у текстах по js як згадують цю технологію, але толком не розумію, що це. Припускаю, бо не зовсім ще втямив концепцію станів (states), про які втім вже почитав у туторіалі Реакту.
Основна суть в тому, що у вас є об'єкт, котрий представляє собою поточний стан речей в додатку.
Коли вам потрібно зробити якісь зміни, то ви відправляєте повідомлення по типу "змінити значення такого-то поля на таке-то значення", а з іншої сторони у вас є селектори, котрими ви можете отримувати потрібні поля з того об'єкту.
Наприклад, ви хочете завантажити список юзерів, і відобразити їхні імена у вигляді списку, а поки вони завантажуються - потрібно показати спінер, котрий індикує, що ото воно у вас завантажується там.
Стан може бути представленим ось так
{
users: null,
isLoading: false
}
Тепер ви викликаєте метод, котрий робе те, що вам треба, і цей метод може виглядати якось так
async function fetchUsers() {
store.set('isLoading', true);
const users = await httpService.fetchUsers();
store.set('isLoading', false);
store.set('users', users);
}
тобто, спочатку воно каже - крути спінера, потім воно завантажує юзерів, і в цей час спінер крутиться, потім воно закінчило завантажувати юзерів, ми кажемо - спінер більш не тре, і далі ми зберігаємо юзерів в об'єкті, що містить поточний стан додатку.
В методі
ви вже якось дивитесь, яке там поле треба змінити, і на яке значення, і змінюєте їх через створення нового об'єкту, наприклад
function(field, value) {
state = {...state, [field]: value};
}
коли зміни відбуваються - ви повідомлеєте всіх зацікавлених в цих змінах передаючи об'єкт стану.
Найпростіше, про що я можу подумати - це створити масив таких функцій.
Спочатку ви їх реєструєте (додаєте в масив), і коли стан змінюється, ви просто проходите по всім зареєстрованим функціям і викликаєте їх передаючи стан, як аргумент, а функції вже витягують зі стану те, що їх цікавить.
function iWantUsers(state) {
const users = state.users; // отримали
// а тут вже йде код, котрий рендерить тих юзерів на сторінці
}
Це все дуже-дуже спрощено, тому що там є ціла хвілософія з екшнами, сайд-ефектами, сінгл соурсом оф трус та імютабіліті, але головна ідея саме така.