Size: a a a

2020 December 11

A

Arushwl in Svelte [svelt]
UI Designer
ладно давайте когда столкнусь с проблемой лучше напишу
Да мне прост интересен ваш кейс использования svelte
источник

A

Arushwl in Svelte [svelt]
Секрет чтоли?
источник

КС

Кирилл Спасибович... in Svelte [svelt]
Eric Rovell
Если подумать, можно рискнуть с контекстом. Вроде компоненты с этой страницы используются только на странице поиска.
export function loadStore() {
 const { subscribe, set, update } = writable({
   data: null,
   status: null
 });

 const fetch(query) {
   update(o => {...o, status: 'loading'});
   fetchData(query)
     .then(res => set(o => {data: res, status: 'success'}))
     .catch(err => update(o => {...o, status: 'failure'}));
 }

 return { subscribe, set, update, fetch };
}


если очень грубо то как-то так
источник

ER

Eric Rovell in Svelte [svelt]
Кирилл Спасибович
export function loadStore() {
 const { subscribe, set, update } = writable({
   data: null,
   status: null
 });

 const fetch(query) {
   update(o => {...o, status: 'loading'});
   fetchData(query)
     .then(res => set(o => {data: res, status: 'success'}))
     .catch(err => update(o => {...o, status: 'failure'}));
 }

 return { subscribe, set, update, fetch };
}


если очень грубо то как-то так
Спасибо, ночью попробую и отпишусь!
источник

КС

Кирилл Спасибович... in Svelte [svelt]
чуток поправил, смысл в общем в том, что этот конструктор сторов будет валяться где-то в lib.js
источник

КС

Кирилл Спасибович... in Svelte [svelt]
и получается всю эту логику, обрабатывающую window или не window можно в идеале туда спрятать
источник

КС

Кирилл Спасибович... in Svelte [svelt]
и в компоненте этого мусора видно не будет
источник

КС

Кирилл Спасибович... in Svelte [svelt]
другое дело, что нужно будет продублировать в preload получение данных, т.к. нам нужен будет промис
источник

КС

Кирилл Спасибович... in Svelte [svelt]
а этот стор по сути прячет промисы от нас
источник

КС

Кирилл Спасибович... in Svelte [svelt]
т.е. мы не можем просто в preload сказать ему store.fetch(query)
источник

ER

Eric Rovell in Svelte [svelt]
Получается, в прелоад тоже нужно притащить стор?
источник

КС

Кирилл Спасибович... in Svelte [svelt]
вот тут и правда интересно, как нам его инициализировать в прелоаде и будет ли это вообще работать :)
источник

ER

Eric Rovell in Svelte [svelt]
Кирилл Спасибович
вот тут и правда интересно, как нам его инициализировать в прелоаде и будет ли это вообще работать :)
😅ни разу не пробовал стор тащить в контекстный модуль
источник

КС

Кирилл Спасибович... in Svelte [svelt]
и так чтобы это не портило инициализацию уже в браузере
источник

ER

Eric Rovell in Svelte [svelt]
Кирилл Спасибович
и так чтобы это не портило инициализацию уже в браузере
Как буду дома, рискну попробовать. Хочется всё-таки через промисы.
источник

КС

Кирилл Спасибович... in Svelte [svelt]
я думаю что можно в прелоаде размазать так же стор
источник

КС

Кирилл Спасибович... in Svelte [svelt]
Eric Rovell
Как буду дома, рискну попробовать. Хочется всё-таки через промисы.
мне кажется через ифы только получится нормально, т.к. ssr'у нужны данные
источник

КС

Кирилл Спасибович... in Svelte [svelt]
т.е. сам await в шаблоне в ssr не понятно как будет функционировать
источник

КС

Кирилл Спасибович... in Svelte [svelt]
на клиенте то можно всё сделать
источник

КС

Кирилл Спасибович... in Svelte [svelt]
export async function preload(page) {
 const results = loadStore();
 fetchData(page.query.search)
   .then(res => results.set({ data: res, status: 'success' }));
 return { results };
}


получится наверное как-то так, мы размазываем стор по компоненту, а там уже начинает работать логика на ифах, которая в ssr просто отобразит контент, а на клиенте по изменению query запустит fetch, который начнёт переключать status, который в свою очередь будет показывать нам спиннеры и тд
источник