Bogdan
вопрос на засыпку , нужно подумать, Если юзаю вместо LINK, тег <a href, реакт приложение все еще SPA или уже нет? и почему
Китикет
Если это что-то из одного редьюсера, то почему просто не в верхнем компоненте обработать
Китикет
Конечно да, просто ты миллион лишних перезагрузок добавляешь
Ну если не превентишь дефолтный ивент клика по ссылке
Bogdan
Конечно да, просто ты миллион лишних перезагрузок добавляешь
Почему да, если перезанружаешь на каждую ссылку, день тупых вопросов, я в ступоре
Natalie
Почему да, если перезанружаешь на каждую ссылку, день тупых вопросов, я в ступоре
потому что не противоречит определению SPA, а именно "SPA - веб-приложение или веб-сайт, использующий единственный HTML-документ как оболочку для всех веб-страниц и организующий взаимодействие с пользователем через динамически подгружаемые HTML, CSS, JavaScript, обычно посредством AJAX." википедия
Bogdan
если нажал а, он страницу запросит заного, значит не спа
Natalie
аджаксом ты тоже посылаешь запросы на сервер
Bogdan
ты аджаксом не страница просишь, ты выполняешь код в браузере при переходе по линку
Natalie
это сейчас вообще значения не имеет, смысл спа в том, что у тебя одна html, и роутинг настроенный в спа определяет что будет отдаваться юзеру, а как ты на страницу перейдешь вообще не важно
Bogdan
это сейчас вообще значения не имеет, смысл спа в том, что у тебя одна html, и роутинг настроенный в спа определяет что будет отдаваться юзеру, а как ты на страницу перейдешь вообще не важно
замени линки на <a href, и переходи на них, ты будешь всегда грузить НОВУЮ страницу, а не выполнять код предыдущей, пропала магия спа в таком случае
Bogdan
в спа вьюхи на клиенте рисуются
спасибо кеп, не знал, я же вопрос поставил как? если переходишь по a ссылке - ты грузишь новую страницу, а не вполняешь код в браузере, отличная черта спа, я не прав? почему
Bogdan
что значит как? ты вообще читал про спа?
почитай мою мысль, я не буду читать твои сообщения, не понимаю тебя
Sergei
почитай мою мысль, я не буду читать твои сообщения, не понимаю тебя
со стороны юзера уже не спа, если все линки поменять
Логинов
как из функциональной компаненты перед тем как отрисоваться что бы она запросила данные с сревака???В классой понятно как componentDidMount() { this.props.initialize; }
Bogdan
Откуда возьмётся новая страница без ssr?
возьми, переделай ссылки на <a,, открой нетворс и наблюдай что происходит,
Andrey
Всем привет. Поясните пожалуйста, как происходит shallow comparision в mapStateToProps, если в стейте у меня вложенные обьекты. Фор экзампл в мепстейттупропс: data: state.first.second.data Сначала сравниваются ссылки на first, потом на second, потом на third и потом сравниваются data? И поэтому в редьюсере мы должны делать копии на всех уровнях вложенности да?
Nikolai
🥟 троллит походу, расходимся
Bogdan
И? Что ты пытаешься доказать?
что при переходе по ссылке внутри приложения, у тебя выполняется перезагрузка страницы, ты не выполняешь жс код, как продразумевает спа, ты заного его грузишь
Andrey
Не нашел инфы имеено о случае когда обьекты обьектов ... (повторить N раз)...обьектов
Bogdan
Зачем такое делать? Все линки в спа на внутренние роуты должны быть с превентдефолт
да захотел такое делать, вот тебе вопрос, ты НЕ можешь ответить ничего, ну сделал человек ради прикола, если не знаешь, не нужно отвечать
Bogdan
Это больше филосовский вопрос
я заметил, что очень трудный вопрос, он меня ввел в ступор, но я придерживаюсь того, что оно не СПА в таком случае, я написал почему
Andrey
нет. сразу data сравнивается
Так зачем тогда мы делаем копии в стейте на каждом уровне вложенности (имьютабельность), а не сразу пишем first.second.data = newValue?
Bogdan
Имхо если постоянно не надо по реальным ссылкам часто переходить то вполне спа
как это не нужно? ну камон, ну вот все линки замени на <a, что бы перейти куда то, жмешь на ссылку, грузишь код по еновой, а не исполняешь тот, что загрузил ранее
Andrey
Так почему в доках пишут что делается шеллоу комперижен? По ссылке
Bogdan
так можно и html контент считать xml api
да нет, я вот пример сказал, чел лупанул ссылки ради интереса, логичное вроде как обьяснение, почему не спа, против не могу сказать доводы
Nikolai
как это не нужно? ну камон, ну вот все линки замени на <a, что бы перейти куда то, жмешь на ссылку, грузишь код по еновой, а не исполняешь тот, что загрузил ранее
Можно на линки и пустые обработчики повесить с превентом и вообще никуда ходить не будет - дальше то что? Кому такое приложение сломанное нужно? Зачем мы это обсуждаем?
Andrey
GG
Так зачем тогда мы делаем копии в стейте на каждом уровне вложенности (имьютабельность), а не сразу пишем first.second.data = newValue?
Ты молодец что задался этим вопросом. Большенство думают что если они обновляют часть стейта, то у них все компоненты тригерятся, и они прикручивают reselect
GG
Это если data обьект?
Да, иначе примитив будет сравниваться
Sergey
Всем Привет. Есть отдельная функция рендера хэдера таблицы и отдельно body таблицы. При отрисовке тела таблицы как можно отрисовывать только в нужную колонку (у колонок Id есть)
Andrey
Ты молодец что задался этим вопросом. Большенство думают что если они обновляют часть стейта, то у них все компоненты тригерятся, и они прикручивают reselect
То есть копии типа ...first {...second} в редьюсере можно и не делать и писать state.first.second.data = newObj и эти копии делаются просто на базе соглашения о имьютабельности?
GG
вот вам пример https://codesandbox.io/s/todos-xwgyb
Bogdan
вот вам пример https://codesandbox.io/s/todos-xwgyb
у тебя паралельно два компоненты, логично , что один тригернулся, я уже усомнился в познаниях
GG
там два компонента, инпут и каунтер, и оба через редакс данными управляют, и когда один из них работает, другой не триггерится
GG
то есть при иземенении state.counter ссылка на state.input не меняется, и соотвественно компонент подписанный на эту ссылку не тригернется
GG
Редьюсер должен возвращать новый стейт для ререндера
ну да. вообщем надо менять только те ссылки, где хочешь ререндер тех компонентов которые подписанны на этот кусочек стейта
Oleg
Ребят, есть ли смысл разбивать картинку и текста в отдельные компоненты? они же все равно используются только в этой карточке
GG
так почему не тригерится то? ты так и не сказал
потому-что ссылка не меняется prevState.counter === nextState.counter prevState.input !== nextState.input
Bogdan
GG
но тригернулся весь стейт, как ссылка осталась?
потому что ты словил оперделенный экшен, и изменил только часть стейта, а все остальное с помощью дестктуризации скопировал
Oleg
Как удобнее
просто во многих туториалах абсолютно всё разбивают на компоненты.
GG
s = {a: {b: {c: e: 5}}} newS = { ...s } s.a.b.c === newS.a.b.c
Andrey
ну да. вообщем надо менять только те ссылки, где хочешь ререндер тех компонентов которые подписанны на этот кусочек стейта
То есть чтобы ререндерить компонент если в data что-то меняется, я должен: 1. Создать новый стейт ...state, чтобы запустить mapStateToProps 2. Изменить data first.second.data: {...state.first.second.data, someNewProp}
Dmitry
но тригернулся весь стейт, как ссылка осталась?
по ссылке сохранил const state = { counter: { value: 0 }, input: { value: '' } } обновишь counter и input передастся по сссылке конект сравнит все и не тригернет
Nikolai
Так там проп не изменится, вот и не будет ререндера
Andrey
То есть чтобы ререндерить компонент если в data что-то меняется, я должен: 1. Создать новый стейт ...state, чтобы запустить mapStateToProps 2. Изменить data first.second.data: {...state.first.second.data, someNewProp}
Но если вдруг кто-то использует просто first или first.second. Тогда в таких компонентах не будет ререндера и мы чтобы подстраховаться делаем копии ...first ...second как все советуют. Я правильно понял?
Dmitry
Так там проп не изменится, вот и не будет ререндера
props всегда новый все остальное по ссылке
Bogdan
выходит реселект Не нужен???????
Dmitry
https://github.com/TinkoffCreditSystems/stapp
Vadim
выходит реселект Не нужен???????
Реселект это про вычисления функций
Bogdan
так вы определитесь то
GG
нет. Не нужен
нет - не нужен, или нет - нужен?)
Dmitry
шо посоны эфектор 2 ?