Bogdan
я не понимаю, почему, указав id при новом рендере компонента, выполняется цикл?? id как был 12, так и остался 12 и попсами кидать пробовал все равно отрабатывает и тру/фолс ставил, ноль толку
Ilya
чойта вдруг
есть сомнения на этот счет?
Andrey
есть сомнения на этот счет?
export const Comp = (props) => { console.log(props) console.log(props.children); return null; }
Andrey
более чем
Bogdan
Еще раз поиграйся с этим, в данном случае useEffect callback вызовется один раз, или проблема не в этом?
я подгрузил данные например, вышел со страницы, данные то в сторе есть, захожу на страницу, он опять грузит, хотя данные то есть
Bogdan
так может у тебя анмаунт родителя срабатывает
сейчас данных нету я явно в компонент передал <App params={id} />} id неизменный, если не изменился пропс, маунта не может быть ведь, а он происходит
Bogdan
Ты говоришь, что уходишь со страницы, соответственно компонент анмаунтится
ну анмаутится он, а данные ведь остались, я захожу он их заного получает, зачем их получать еще раз, если они есть?
Dmitriy
Dmitriy
лол
тиха
Andrey
ну анмаутится он, а данные ведь остались, я захожу он их заного получает, зачем их получать еще раз, если они есть?
ну так и чекай их наличие, компонент откуда знает, есть они или нет ты ему напрямую говоришь их фетчить, безразборно
Vadim
если нужно
Dmitriy
или где, ты там запрос делаешь
Bogdan
ну так и чекай их наличие, компонент откуда знает, есть они или нет ты ему напрямую говоришь их фетчить, безразборно
ну в классе didMount можно было сравнить пропсы, если одинаковы, не обновлять, тут как это сделать?
Andrey
ну в классе didMount можно было сравнить пропсы, если одинаковы, не обновлять, тут как это сделать?
в эффекте просто проверяешь есть ли данные есть - ок, нет - фетчишь
Dmitriy
ну в классе didMount можно было сравнить пропсы, если одинаковы, не обновлять, тут как это сделать?
хош совет? тебе нужно отдохнуть немного. Побегать \ серик глянуть \ поспать . Полегчает
Bogdan
в эффекте просто проверяешь есть ли данные есть - ок, нет - фетчишь
как это проверить? второй параметр, я что только тутда не передавал
Andrey
как это проверить? второй параметр, я что только тутда не передавал
... useEffect(() => { someStore.getState() === null && fetchMyData(); }, []); ...
Dmitriy
а вообще, по хорошему, если нужно кешировать данные, то лучше делай это на уровне апи в твоём приложении
Andrey
ну либо, если данные статичные, и их не надо обновлять при переходах, фетчи в компоненте выше
Dmitriy
чтобы не нагромождать компоненты логикой
Bogdan
а вообще, по хорошему, если нужно кешировать данные, то лучше делай это на уровне апи в твоём приложении
да зачем кеш я не понимаю, вот зашли в каталог фильмов, подгрузили 1 раз фильмы, тоесть, если мы переходим в лк, фильиы ведь не изменны, при переходе в каталог, список в стейте то есть, зачем еще запрос отправлять то?
Andrey
кароче, дабы не разрывать мозг тебе, храни эти данные не в стейте компонента текущего либо выше, либо в сторе эффектора/редаксе/ватева
Bogdan
это и называется кэш потому что
так я храню в сторе ридакса массив
Dmitriy
const fetchMyData = () => { let lastId = null; let lastData = null; return (id) => { if (lastId !== id) { return fetch('url').then(data => lastData = data); } return Promise.resolve(lastData); }; }
Andrey
ну так ты фетч вынеси выше, чтобы у тебя при переходе на страницу он не вызывался ну либо проверяй, что мол если есть данные для этой страницы, то уже не надо их загружать (но вообще, эти танцы с кешем вообще не упали, хз, зачем напрягаться)
Dmitriy
Но это уже другая история)
Bogdan
const fetchMyData = () => { let lastId = null; let lastData = null; return (id) => { if (lastId !== id) { return fetch('url').then(data => lastData = data); } return Promise.resolve(lastData); }; }
запрос внутри компонента? это же жесть, если их 100, поменялся урл, либо на аксиос сел
Dmitriy
запрос внутри компонента? это же жесть, если их 100, поменялся урл, либо на аксиос сел
Ух как) А что, если я тебе скажу, что этот код не внутри компонента можно положить?)
Dmitriy
И можно вынести урлу в константу
Andrey
А если он id поменяет?
ну так обычно грузят лист сущностей, там все данные уже будут а по одной выцеплять из апи - зачем? ну если очень хочется, то да, можно кешировать по айдишникам в слое с апи, но хз, больше продрочишься, чем профита получишь
Bogdan
ну так ты фетч вынеси выше, чтобы у тебя при переходе на страницу он не вызывался ну либо проверяй, что мол если есть данные для этой страницы, то уже не надо их загружать (но вообще, эти танцы с кешем вообще не упали, хз, зачем напрягаться)
поставлю вопрос тогда по другому, есть главная страница, на ней подгружается 3 статьи, время загрузки 5сек, тоесть эти 5сек там будет спинер, статьи подгрузились, все хорошо, спинер пропал, тут я перехожу в лк, потому опять на главную и опять спинер 5сек ради 3ех статей, как от этого избавиться? я раньше сравнивал пропсы , если одинаковы не отправлял запрос
Bogdan
тоесть достаточно 1 раз подгрузить
Andrey
допустим они одинаковы
грузи уровнем выше, один раз при маунте приложения например
Bogdan
грузи уровнем выше, один раз при маунте приложения например
ладно, забей, видимо мы не поняли друг друга, я в классах делал это одной строчкой, сравнив пропсы, тут умереть нужно, что бы достич такого еффекта
Andrey
ладно, забей, видимо мы не поняли друг друга, я в классах делал это одной строчкой, сравнив пропсы, тут умереть нужно, что бы достич такого еффекта
да не, достаточно уметь слушать) тебе не надо ничего сравнивать, просто данные нужно грузить там, где они нужны
Bogdan
да не, достаточно уметь слушать) тебе не надо ничего сравнивать, просто данные нужно грузить там, где они нужны
есть страница статей, зачем мне выше грузить данные, если я гружу их, когда перейду на нее
Andrey
есть страница статей, зачем мне выше грузить данные, если я гружу их, когда перейду на нее
ну тогда мучайся с кешем, либо грузи каждый раз, если не хочешь так если это статика, нет ничего зазорного чтобы ее прелоаднуть особенно если это главная страница
Bogdan
ну тогда мучайся с кешем, либо грузи каждый раз, если не хочешь так если это статика, нет ничего зазорного чтобы ее прелоаднуть особенно если это главная страница
ну вот пример, редактирование статьи, список статей, выбираем статью, жмем, спинер и данные статьи подгрузились, тут все норм, запрос нужен всегда, а вот сам список не изменен, но он тоже всегда подгружается? зачем?
Andrey
ну вот пример, редактирование статьи, список статей, выбираем статью, жмем, спинер и данные статьи подгрузились, тут все норм, запрос нужен всегда, а вот сам список не изменен, но он тоже всегда подгружается? зачем?
я хз, твой же код я же написал: мучайся с кешем, либо грузи каждый раз, если не хочешь так если это статика, проще сверху грузануть эти статьи и не морочить себе голову
🅅aleriy
Bogdan
я хз, твой же код я же написал: мучайся с кешем, либо грузи каждый раз, если не хочешь так если это статика, проще сверху грузануть эти статьи и не морочить себе голову
статьи добавить юзер может, вот он добавил, а мы же сверху грузим, я их не получу пока не перезагружу страницу тогда
Andrey
статьи добавить юзер может, вот он добавил, а мы же сверху грузим, я их не получу пока не перезагружу страницу тогда
добавляй в стор создал статью -> отправил на сервер -> все окс -> запушил новую статью в стор на клиенте -> обновился список статей у тебя же все равно будет подписка на редакс стор, статья подсосется автоматом, как ты ее добавишь
🅅aleriy
отправляй в запросе айдишки статей текущей страницы и таймштамп их последнего получения в веб возвращай с бакенда только обновленные :)
Andrey
выше уровень, это в корневом компоненте отправлять запросы?
это из корневого(?) компонента дергать экшн, который сфетчит
Kurzdor
😄
Kurzdor
Bogdan
это из корневого(?) компонента дергать экшн, который сфетчит
я короче все равно не понял, как ты у себя в проекте делаешь, нужна тебе информация об избранных файлах юзера, ты когда запрос отправляешь?
Eugene
page > cdm
Евгений
Discourse: Rails + Ember.js
Евгений
А есть популярные проекты где нету реакта? Либы компонентов не предалагать
Евгений
Ember.js
Евгений
сейчас поддерживаю этот форум
artalar
Я хочу делать data-driven подписки в саге, вроде такого function* subscribe(selector, saga) { let state = yield select(selector); while (true) { yield take('*'); const newState = yield select(selector); if (state !== newState) { state = newState; yield fork(saga, state); } } } // usage function* requestData() { yield subscribe(state => state.input, function* (input) { const result = yield call(fetch, input) yield put(responce(result)) }) } Есть уже что-то готовое, снипеты \ либки \ какой-то проект где посмотреть?
Bogdan
я блд понял, нужно просто внутри проверить..... это жесть