@react_js

Страница 355 из 5115
Dmitry
04.08.2016
14:38:18
У тебя сработает componentWillUpdate два раза. На второе срабатывание будут и пропс, и стейт новые

from
04.08.2016
14:38:52
setState - асинхронный метод. 2 аргументом идет колбэк, ты это знаешь?
да всё это известно, разумеется. Я не спрашиваю, почему так :)

Интересно, как выкрутиться правильнее

Nikita
04.08.2016
14:39:54
например в sCU не давать апдейт, если состояние не то, что ты ожидаешь) Но фиддл сделай, да)

Google
Dmitry
04.08.2016
14:40:57
Ну очевидно, что рендер сработает два раза подряд, и на второй раз все будет ок, если ты логику в componentWillUpdate опишешь. Или тебе принципиально, чтобы эта логика стаботала один раз с новыми пропс и стейтом?

from
04.08.2016
14:43:08
в componentWillReceiveProps происходит так же setState, который не стоит пихать в willUpdate

Dmitry
04.08.2016
14:44:47
А, ну тогда да, коллбэком в setState() вызывай функцию из родителя на изменение пропс. Ну или пересмотри реализацию этих компонентов )

from
04.08.2016
15:00:51
уффф

в общем как-то так https://jsfiddle.net/69z2wepo/51669/

сорри, что предназначение свойств не очень понятно дело короче в том, что типа дерево элементов рендерится

в общем "средний" элемент одновременно выставляет стейт в методе и одновременно реагирует на приходящие пропсы

Ostap
04.08.2016
15:05:09
hello world

from
04.08.2016
15:05:13
блин )

https://jsfiddle.net/69z2wepo/51669/

blkmrkt
04.08.2016
15:06:08
в общем как-то так https://jsfiddle.net/69z2wepo/51669/
Слишком сложно как-то все

from
04.08.2016
15:06:32
сорри )

Google
from
04.08.2016
15:06:40
вроде упростил по максимуму

из-за этого может цель перестала быть ясной

проблема в общем внутри <SomeComponent />

а <RecursiveComponent /> слушает клик

че-то вообще не приходит в голову, как правильно сделать или переиграть (

можно тупо к компоненту свойство прицепить ) но это именно тупо )

blkmrkt
04.08.2016
15:14:07
получается у тебя набор компонентов и чайлдов, и каждый чайлд должен знать, был ли его родитель раньше кликнут?

from
04.08.2016
15:14:38
эээ не, чайлд о родителе ничего не должен знать

blkmrkt
04.08.2016
15:15:02
ну получается то так, раз родитель передает это в чайлд через пропсы

from
04.08.2016
15:16:18
не, ты не так интерпретируешь )) Когда компоненту что-то передаётся через пропсы, это не называется "компонент знает о родителе". На то и пропсы )

SomeElement получает информацию isActive он или нет Иерархия правильная

Алексей
04.08.2016
15:17:30
@everdimension он не про имплементацию говорит а о том что на самом деле здесь происходит.. он при этом прав.

blkmrkt
04.08.2016
15:17:37
а мне кажется что ты стейт выводишь из пропсов тут, и это неправильно)

from
04.08.2016
15:18:26
@everdimension он не про имплементацию говорит а о том что на самом деле здесь происходит.. он при этом прав.
так подскажите что не так, если что-то не так :) Сейчас я не вижу, где якобы компонент что-то о родителе знает

Где именно?
а, ну да, в componentWillReceiveProps собственно

blkmrkt
04.08.2016
15:29:25
Где именно?
у тебя RecursiveElement1 рендерит SomeElement, который рендерит RecursiveElement2. Проучается что SomeElement создает себе стейт из пропсов RecursiveElement1, вот RecursiveElement2 и дергается 2 раза

блин, если убрать рекурсию, то гораздо проще будет же

Google
from
04.08.2016
15:31:34
Так, насчёт того, что стейт выводится из пропсов. Да, нехорошо, но логика такая — компонент, став активным, имеет право выставлять стейт того, какой именно чайлд будет активным

blkmrkt
04.08.2016
15:33:31
хм, еще RecursiveComponentы прокликиваются, наверное так не задумывалось?

from
04.08.2016
15:34:39
задумывалось Если компонент кликнулся где-то "глубоко", то такой же компонент где-то "наверху" тоже должен на клик реагировать

в общем-то бабблинг тут работает прекрасно

И вообще всё получалось очень складненько вплоть до вот этого момента

Grigory
04.08.2016
15:55:07
Коллеги, а кто нибудь делает стейт, в котором храниться массив элементов и рядом эти же элементы byId? Если да, расскажите плиз, как реализуете.

Dmitry
04.08.2016
15:58:14
Я :) import { keyBy } from ‘lodash’; var list = []; const z = { list, listById: keyBy(list, ‘id’) };

Вот так нагляднее: import { keyBy } from 'lodash'; import { ITEMS_LOADED } from '../constants/actionsTypes'; const initialState = { items: [], itemsById: {} }; const reducer = (state = initialState, action) => { if (action.type === ITEMS_LOADED) { return { items: action.payload, itemsById: keyBy(action.payload, 'id') }; } return state; }; export default reducer;

Evgeny
04.08.2016
16:02:09
Используй handleActions из redux-actions

Dmitry
04.08.2016
16:03:12
https://github.com/paularmstrong/normalizr

Grigory
04.08.2016
16:05:14
@azrael25 add/remove делаешь Object.assign({} itemsById, obj) ?

Dmitry
04.08.2016
16:06:11
Ага, чтоб новый объект каждый раз возвращался

Grigory
04.08.2016
16:06:52
Ок, спасибо

Что-то лень руками поддерживать сразу и items и itemsById на каждое действие

Алексей
04.08.2016
16:08:22
а зачем вообще это нужно? если не сикрет

Grigory
04.08.2016
16:08:58
Чтобы массив каждый раз не переберать. O(1) доступ к айтемам

Алексей
04.08.2016
16:10:31
Чтобы массив каждый раз не переберать. O(1) доступ к айтемам
так при переключании сортировки всеравно его сортировать.. хоть убей пока не понимаю где тут экономия

Grigory
04.08.2016
16:11:46
Как думаете, а что если написать кастомный класс, унаследованный от массива, который будет возвращать новый массив на действия addAt(), removeById, removeByIndex и будет реализовывать поддержание byId?

@Ai_boy сортировки — да, не поможет. Но когда есть несколько хранилищ данных и для отоюражения нужно бегать в соседнии — это облегчит жизнь. Например, у тебя есть массив юзеров и массив публикаций этих юзеров. Ты рендеришь 100 публикаций от 100 юзеров, тебе нужно взять из массива юзеров имена авторов. В одном случае ты переберешь 100 раз массив из n айтемов, в другом — прост сто раз заберешь byId

from
04.08.2016
16:17:29
для упрощение примера, естесственно. Представь что там if какой-нибудь, в чем проблема)

Google
Grigory
04.08.2016
16:20:37
есть же dataloader например
Годится для простых коллекций. Для списка, содержащего данные из разных источников уже не покатит

blkmrkt
04.08.2016
16:23:55
Годится для простых коллекций. Для списка, содержащего данные из разных источников уже не покатит
дык в итоге то же самое получится: либо ты вручную дергаешь нужные данные кусками по айди, либо просто спрашиваешь dataloader с консистент апи о том что требуется

Алексей
04.08.2016
16:24:08
> @gkuznetsov В одном случае ты переберешь 100 раз массив из n айтемов, в другом — прост сто раз заберешь byId А о каких величинах идет речь? В этой ситуации IndexDB, его враппер или https://github.com/agershun/alasql выглядит логичнее

Алексей
04.08.2016
16:26:04
Тысячи, иногда 10-ки тысяч элементов
Ну тогда почему не AlaSQL какойнибудь ? // B) SQL on array of objects var data = [{a:1,b:10}, {a:2,b:20}, {a:1,b:30}]; var res = alasql('SELECT a, SUM(b) AS b FROM ? GROUP BY a',[data]); console.log(res); // [{"a":1,"b":40},{"a":2,"b":20}]

Admin
ERROR: S client not available

Алексей
04.08.2016
16:30:14
Посмотрю в эту сторону, спасибо
FYI - у них очень хорошая WIKI https://github.com/agershun/alasql/wiki/Data-manipulation и вот к примеру пример :) https://github.com/agershun/alasql/wiki/How%20to%20add%20own%20keys%20for%20grouped%20output

Yevhenii
04.08.2016
16:38:17
Посоветуйте хороших книжек по реакту, желательно на английском. А то на амазоне столько мусора и сложно найти что-то стоящее

Vadim
04.08.2016
16:40:39
Актуальный проект самая лучшая книга

Vadim
04.08.2016
16:41:03
Ну и всякие бойлерплейты

Yevhenii
04.08.2016
16:41:13
Актуальный проект самая лучшая книга
А как писать не зная, что пишешь?

Vadim
04.08.2016
16:41:37
Смотришь готовый код, повторяешь, думаешь, пишешь свой

Vladimir
04.08.2016
17:08:15
кто блин придумывал работу с рефами в 14 реакте

from
04.08.2016
17:09:51
а что не так?

Vladimir
04.08.2016
17:09:58
если реф - простой тег, возвращается нода. если сложный компонент - возвращается компонент, ну и все это если не депрекейтед, то легаси

ну не так что неединообразно

что когда смотришь в коде на this.refs.someRef, надо выяснять, что там вообще

Google
Vladimir
04.08.2016
17:16:22
ну и намек на скорый выпил не добавляет оптимизма

Alexey
04.08.2016
17:22:31
ну и намек на скорый выпил не добавляет оптимизма
Как я понимаю удалят рефы в виде строки, но ты сможешь их получить передав функцию в пропс

Vladimir
04.08.2016
17:23:03
ну да, мое любимое занятие переписывать полтыщи компонентов на новые апи

lamo2k
04.08.2016
17:24:16
Может есть у кого примеры склейки изоморфного приложения react + redux + universal-router. Интересно что получилось.

Alexey
04.08.2016
17:25:11
Ну, всегда можно версию зафиксировать :)

Vladimir
04.08.2016
17:25:11
Note: Although string refs are not deprecated, they are considered legacy, and will likely be deprecated at some point in the future. Callback refs are preferred.

from
04.08.2016
17:25:18
выпиливать хотят ref="string", но ref={this.handleMount} вроде никуда не собирается

Vladimir
04.08.2016
17:26:04
ну вот не очень ясно, зачем выпиливать ref=string, простите

from
04.08.2016
17:27:36
коллбэк удобная штука тем, что если её правильно написать (а именно n => this.node = n), то не надо следить, есть ли в доме чайлд — this.node станет null, если компонент-реф анмаунтился

А в остальном разницы использования никакой, так что в чем проблема

То, что реф может быть и чисто дом-элементом, и реакт элементом — актуально для обоих способов (вроде?)

from
04.08.2016
17:32:56
ну вот )

Vladimir
04.08.2016
17:42:57
Проблема в том, что опять горы кода лопатить

Ладно, к проблемам этого дня. Как благородные доны решают такой кейс: при нажатии кнопки в некоторое место страницы подгружаются данные и в это место необходимо проскроллить окно?

В редуксе, это важно

Konstantin
04.08.2016
17:52:30
В редуксе, это важно
Скролл выполнять прямо в редуксе? Чего то не понял мб

Страница 355 из 5115