Size: a a a

2019 December 15

TS

Terry Sahaidak in React Kyiv
J. C.
Ты бросаешься фразами, без аргументов особо. Сначала сказал Это просто "дичь", без объяснений, потом привел пример, который не работает. Твое утверждение что стейт не нужно поднимать тоже ошибочное скорее всего. Вариант с key рабочий, да
мій код повністю робочий
тому що я з самого початку думав, що компонент буде ремаунтитись (на новому рауті), а не просто приходити йому нові пропси
з новими пропсами “трюк” з key – це звична практика.
источник

TS

Terry Sahaidak in React Kyiv
Bogdan
Не в редаксе, но и не в реакте) Хотя уж лучше все в редаксе чем в реакте
значить ще не поняв, нічого, ще поймеш)
источник

B

Bogdan in React Kyiv
Terry Sahaidak
значить ще не поняв, нічого, ще поймеш)
опять же токсик ну и ладно
источник

TS

Terry Sahaidak in React Kyiv
Bogdan
опять же токсик ну и ладно
я не тролю тебе, а кажу, що рано чи пізно з досвідом ти зрозумієш, що це погана ідея
источник

JC

J. C. in React Kyiv
Terry Sahaidak
ти б спочатку прочитав тред

@dadayada пропонував тримати selectedIndex разом із об’єктом продукта.
тепер подумаємо про типовий розклад того, якти будеш зберігати продукти:

const state = {
 // або так
 products: [
   { id: 1, mainImage: ‘https://…', selectedIndex },
 ],

 // або так
 products: {
   1: { id: 1, mainImage: ‘https://…', selectedIndex }
 }
}


або з більшою вкладеністю
якщо оновляти selectedIndex, то все що буде до конкретного продукту буде мати нові референси

крім того так чи інакше треба буде це все обнуляти, тому робити цю процедуру ще раз

якщо ж тримати поза, то не буде лишніх об’єктів, правильно, протре треба буде знову ж таки обнуляти цей стейт
Я все читал. Ты в обоих случаях пихаешь selectedIndex в объект продукта. Я писал выше, что selectedIndex рядом нужно держать. И про то, что нужно его сбрасывать тоже писал
источник

TS

Terry Sahaidak in React Kyiv
J. C.
Я все читал. Ты в обоих случаях пихаешь selectedIndex в объект продукта. Я писал выше, что selectedIndex рядом нужно держать. И про то, что нужно его сбрасывать тоже писал
але я ж відписував не тобі, а @dadayada
источник

B

Bogdan in React Kyiv
Terry Sahaidak
я не тролю тебе, а кажу, що рано чи пізно з досвідом ти зрозумієш, що це погана ідея
Меня философия не интересует. И костылей с реактовским стейтом мне уже хватило
источник

G

GNU/Vsevolod.rs in React Kyiv
Terry Sahaidak
де в редаксі фп?
Redux -> Flux -> FP
источник

JC

J. C. in React Kyiv
Terry Sahaidak
мій код повністю робочий
тому що я з самого початку думав, що компонент буде ремаунтитись (на новому рауті), а не просто приходити йому нові пропси
з новими пропсами “трюк” з key – це звична практика.
Ты пример приводил до упоминания key для ремаунта.
источник

TS

Terry Sahaidak in React Kyiv
J. C.
Ты пример приводил до упоминания key для ремаунта.
ще раз перечитай меседж, на який ти зробив реплай
источник

TS

Terry Sahaidak in React Kyiv
Bogdan
Меня философия не интересует. И костылей с реактовским стейтом мне уже хватило
а й не про філософію. а про швидкодію
источник

B

Bogdan in React Kyiv
Terry Sahaidak
ти б спочатку прочитав тред

@dadayada пропонував тримати selectedIndex разом із об’єктом продукта.
тепер подумаємо про типовий розклад того, якти будеш зберігати продукти:

const state = {
 // або так
 products: [
   { id: 1, mainImage: ‘https://…', selectedIndex },
 ],

 // або так
 products: {
   1: { id: 1, mainImage: ‘https://…', selectedIndex }
 }
}


або з більшою вкладеністю
якщо оновляти selectedIndex, то все що буде до конкретного продукту буде мати нові референси

крім того так чи інакше треба буде це все обнуляти, тому робити цю процедуру ще раз

якщо ж тримати поза, то не буде лишніх об’єктів, правильно, протре треба буде знову ж таки обнуляти цей стейт
Я бы вынес стейт галереи вообще в отдельную ветку. Но ты уже дал понять, что тебе такая идея дико не нравится. Здесь уже больше про корявость самого редакса
источник

JC

J. C. in React Kyiv
Terry Sahaidak
ще раз перечитай меседж, на який ти зробив реплай
Думаю тебе нужно по проще относится к спорам, а то ощущение что твое самолюбие задели, и ты тут начал диагнозы ставить кому мозг сломало и кто что сможет понять. Даже если ты прям гуру Реакта, что врядли
источник

TS

Terry Sahaidak in React Kyiv
J. C.
Думаю тебе нужно по проще относится к спорам, а то ощущение что твое самолюбие задели, и ты тут начал диагнозы ставить кому мозг сломало и кто что сможет понять. Даже если ты прям гуру Реакта, что врядли
ні, не зачепили “самолюбіє”
тема редаксу і “ламає мозок” тут піднімалась не раз, це такий собі термін, який описує ту кількість костилів та лишніх дій, до якої редакс спонукає людей

і це ви мене почали переконувати, що “краще зробити так”, хоч відповідь я дав одразy, ¯\_(ツ)_/¯

я тут для того, щоб допомагати людям. тому ось тримай сентбокс з двома рішеннями задачі, які на мою думку є прийнятними і читаємими:

https://codesandbox.io/s/nostalgic-dust-k5vr3

(а все що я тут висловив виключно моя думка, яку я маю цілковите право висловлювати, як і кожен з присутніх, не забувайте це, перш ніж писати “токсік”)
источник

TS

Terry Sahaidak in React Kyiv
до useDerivedState можна ще додати підтримку колбеку, в який буде попадати попередній стейт, тоді взагалі цікава штука буде
источник

JC

J. C. in React Kyiv
Terry Sahaidak
ні, не зачепили “самолюбіє”
тема редаксу і “ламає мозок” тут піднімалась не раз, це такий собі термін, який описує ту кількість костилів та лишніх дій, до якої редакс спонукає людей

і це ви мене почали переконувати, що “краще зробити так”, хоч відповідь я дав одразy, ¯\_(ツ)_/¯

я тут для того, щоб допомагати людям. тому ось тримай сентбокс з двома рішеннями задачі, які на мою думку є прийнятними і читаємими:

https://codesandbox.io/s/nostalgic-dust-k5vr3

(а все що я тут висловив виключно моя думка, яку я маю цілковите право висловлювати, як і кожен з присутніх, не забувайте це, перш ніж писати “токсік”)
В твоем примере насколько я понял useDerivedState по сути точно так же с помощью useEffect  обновляет локальный стейте, только еще более заморочено с помощью рефов и форсе апдейт. При том что на мой изначальный вариант в 3 строчки ты написал "дичь". Только твоя "дичь" отдельным хуком. Уж лучше key передать
источник

TS

Terry Sahaidak in React Kyiv
J. C.
В твоем примере насколько я понял useDerivedState по сути точно так же с помощью useEffect  обновляет локальный стейте, только еще более заморочено с помощью рефов и форсе апдейт. При том что на мой изначальный вариант в 3 строчки ты написал "дичь". Только твоя "дичь" отдельным хуком. Уж лучше key передать
мій варіант не несе за собою лишнього ререндера, і так як я його запакував в окремий хук і написав як воно працює, в цьому можна буде розібратись без проблем.
з key є одна невеличка проблема, яку часто замовчують, але вона існує — все таки мало хто уважно читає доку і знає про цей “трюк”. і дуже легко його можна буде забути додати зверху, відповідно рано чи пізно хтось натрапить на “баг”, що воноо чогось не працює, хоч працювало до того
источник

TS

Terry Sahaidak in React Kyiv
особисто я б обрав таки key, тому шо це тупо простіше і в рази швидше
а ще краще я б десь на рівні раутінгу реалізував все так, щоб цієї проблеми не виникало в принципі
источник

JC

J. C. in React Kyiv
Terry Sahaidak
мій варіант не несе за собою лишнього ререндера, і так як я його запакував в окремий хук і написав як воно працює, в цьому можна буде розібратись без проблем.
з key є одна невеличка проблема, яку часто замовчують, але вона існує — все таки мало хто уважно читає доку і знає про цей “трюк”. і дуже легко його можна буде забути додати зверху, відповідно рано чи пізно хтось натрапить на “баг”, що воноо чогось не працює, хоч працювало до того
Ок, хук твой посмотрю еще подробнее, как он работает. У Реакта в доках есть пример где setState вызывается прямо во время рендера c условием, не в useEffect:
function ScrollView({row}) {
 let [prevRow, setPrevRow] = useState(null);

 if (row !== prevRow) {
   setPrevRow(row);
 }

 return ...;
}

Возможно с таким трюком не будет апдейта дополнительного
источник

TS

Terry Sahaidak in React Kyiv
J. C.
Ок, хук твой посмотрю еще подробнее, как он работает. У Реакта в доках есть пример где setState вызывается прямо во время рендера c условием, не в useEffect:
function ScrollView({row}) {
 let [prevRow, setPrevRow] = useState(null);

 if (row !== prevRow) {
   setPrevRow(row);
 }

 return ...;
}

Возможно с таким трюком не будет апдейта дополнительного
коли буде cuncurent mode – є шанс, що не буде)

взагалі вся суть кастумного хуку в тому, щоб не писати оце) тут ще є один кейс, яким легко вистрілити собі в ногу — воно буде виконувати setPrevRow при кожному ререндері ScrollView, не залежно від того чи row дійсно помінявся. тому будь що, що впливне на ререндер цього компонента все зламає (якщо ти обрав якийсь інший row вже)
источник