Size: a a a

React — русскоговорящее сообщество

2020 October 18

РК

Рома Каменівський... in React — русскоговорящее сообщество
K F
Покажи код
Работа хука:
хук принимает в себя 2 аргумента:
1) Обязательный: callback функция (я её беру из своего api сервиса) которая должна вызываться в triggerFetch и useEffect после чего отдать данные
2)Опциональный: сам же аргумент который прилетает в эту же функции.
(в хуке думаю разберетесь);

Примеры использования

1 Вариант использования:
const { getPopularItemsList } = service;
const { data, loading, triggerFetch } = useData(getElementById, 5);


2 Вариант использования где-то в другой части приложении где я спускаю triggerFetch:
const { getElementById } = service;
 <button onClick={() => triggerFetch(getElementById, 2)}> Получить 2 элемент</button>


Пример фукнций в сервисе
getElementById = async id => {
   const res = await this._getResource(`${baseUrl}/lookup.php?i=${id}`);
   return res;
 };


Сама реализация хука:
import { useState, useEffect, useCallback } from 'react';

const useData = (requestData, arg) => {
 const [data, setData] = useState(null);
 const [loading, setLoading] = useState(false);
 const [error, setError] = useState(false);

 const triggerFetch = useCallback(() => {

   return requestData(arg);
 }, [requestData, arg]);

 useEffect(() => {
   let cancelled = false;
   // setLoading(true);

   triggerFetch().then(response => {
     if (!cancelled) {
       setData(response);
       setLoading(false);
     }

   }).catch(err => setError(true));

   return () => { cancelled = true };
 }, [triggerFetch]);

 return { data, loading, error, triggerFetch };
}

export default useData;
источник

BE

Black Eyes in React — русскоговорящее сообщество
K F
Ну у тебя в комбайне в initstate свойства редьюсера указаны, но не указан сам редьюсер
Это не есть сам редьюсер?
источник

KF

K F in React — русскоговорящее сообщество
Black Eyes
не асилил
Если не ошибаюсь то {reducers : {logged_in:false,...}} в initstate передай
источник

EB

Egor Burunkov in React — русскоговорящее сообщество
Кто как изучает новую информацию по программированию ? Интересно услышать разные методы, т.к. у меня прогресс в обучении еле-еле идёт, хотя посвящаю время регулярно
источник

RA

Ruslan Abdullaev in React — русскоговорящее сообщество
Black Eyes
Это не есть сам редьюсер?
Он про другое. Если ты используешь preloadState в createStore, то его струтура должна быть
{
  [reducer id]: reducer initial state
...
}
источник

BE

Black Eyes in React — русскоговорящее сообщество
K F
Если не ошибаюсь то {reducers : {logged_in:false,...}} в initstate передай
ты ошибаешься, в createStore передается reducers, initstate отдельно
источник

BE

Black Eyes in React — русскоговорящее сообщество
Ruslan Abdullaev
Он про другое. Если ты используешь preloadState в createStore, то его струтура должна быть
{
  [reducer id]: reducer initial state
...
}
😑
источник

RA

Ruslan Abdullaev in React — русскоговорящее сообщество
т.е. initialState должен быть
{
 localize: {.....},
 reducers: {.....}
...
}
источник

BE

Black Eyes in React — русскоговорящее сообщество
Ruslan Abdullaev
Он про другое. Если ты используешь preloadState в createStore, то его струтура должна быть
{
  [reducer id]: reducer initial state
...
}
то есть редюсеры и в комбайне и в initstate
источник

BE

Black Eyes in React — русскоговорящее сообщество
источник

РК

Рома Каменівський... in React — русскоговорящее сообщество
K F
Покажи код
источник

RA

Ruslan Abdullaev in React — русскоговорящее сообщество
Black Eyes
то есть редюсеры и в комбайне и в initstate
в combine - объект с редюсерами, в initState - объект с их стейтом
источник

РК

Рома Каменівський... in React — русскоговорящее сообщество
Думаю так будет нагляднее
источник

RA

Ruslan Abdullaev in React — русскоговорящее сообщество
@darkdeal_net initState, как и middlewares - это опциальные параметры, никто не запрещает использовать initState у каждого конкретного редюсера
источник

BE

Black Eyes in React — русскоговорящее сообщество
Ruslan Abdullaev
в combine - объект с редюсерами, в initState - объект с их стейтом
не понял, что значит сам редюсер и его стейт, где грань?
источник

RA

Ruslan Abdullaev in React — русскоговорящее сообщество
Black Eyes
не понял, что значит сам редюсер и его стейт, где грань?
preloadState - не зря называется preload, это вариант, когда у тебя состояние приходит с сервера, например, при SSR. В нормальной ситуации, достаточно initialState в самом редюсере
источник

KF

K F in React — русскоговорящее сообщество
Рома Каменівський
Думаю так будет нагляднее
Сложно без сандбокса определить, надо идти от обратного если useEffect не вызвался значит депс не изменились, значит ссылка на triggerFetch не изменилась, значит параметры не изменились, в эту сторону смотри...
источник

РК

Рома Каменівський... in React — русскоговорящее сообщество
K F
Сложно без сандбокса определить, надо идти от обратного если useEffect не вызвался значит депс не изменились, значит ссылка на triggerFetch не изменилась, значит параметры не изменились, в эту сторону смотри...
в этом и проблема, параметры то изменились..Гуглил не нашёл ничего подобного. У меня есть такой же хук только вся логика в triggerFetch а не в эфеекте как сейчас, но так я уже не смогу избавится от утечек памяти в анмаунтинге..(что тоже очень важно)
источник

BE

Black Eyes in React — русскоговорящее сообщество
Ruslan Abdullaev
preloadState - не зря называется preload, это вариант, когда у тебя состояние приходит с сервера, например, при SSR. В нормальной ситуации, достаточно initialState в самом редюсере
Ну вот пример из доки
источник

KF

K F in React — русскоговорящее сообщество
Рома Каменівський
в этом и проблема, параметры то изменились..Гуглил не нашёл ничего подобного. У меня есть такой же хук только вся логика в triggerFetch а не в эфеекте как сейчас, но так я уже не смогу избавится от утечек памяти в анмаунтинге..(что тоже очень важно)
Смотри ты doFetch ретернул с кастомного хука, а использовал в компонентах triggerFetch и плюс у тебя в triggerFetch 2 параметра в примере, но ты их в функции triggerfetch в твоем кастомном хуке не указал же
источник