@react_js

Страница 1541 из 5115
Alex
23.06.2017
20:45:14
Где и почему?

Vladimir
23.06.2017
20:45:50
Где и почему?
В immutable.js, clojure, etc

Почему - потому что эта плохая структура данных для чтения

Google
Vladimir
23.06.2017
20:46:53
И еще она подразумевает бесконечное хранение всех состояний

Max
23.06.2017
20:50:37
есть же какие то границы денормализации, разумные. хранить в юзере все проекты и там все таски и все комменты это безумие.
это же бинес-логика - one-to-many и несколько сущностей - у каждого юзера может быть много папок, у каждой папки может быть много проектов, у каждого проекта может быть много тасков и у каждого таска может быть много комментариев. В одном объекте все не хранится - у объекта юзера есть массив ссылок на папки у папки массив ссылок на проекты и т.д, например user = {name: 'вася, folders: [... {title: 'project1', tasks: [... {title: 'task1', comments: [... {text: 'comment1'}]}]} ]}

Alex
23.06.2017
20:52:36
Почему - потому что эта плохая структура данных для чтения
Зато хорошая для записи. И пример есть хороший - rope. Но я согласен с тем, что real world сценарий с ходу придумать не просто.

Max
23.06.2017
20:54:22
а у одного проекта не может быть много юзеров?
там же ссылки, у каждого юзера есть массив ссылок на проекты и некоторые объекты будут совпадать

Alex
23.06.2017
20:55:40
это же бинес-логика - one-to-many и несколько сущностей - у каждого юзера может быть много папок, у каждой папки может быть много проектов, у каждого проекта может быть много тасков и у каждого таска может быть много комментариев. В одном объекте все не хранится - у объекта юзера есть массив ссылок на папки у папки массив ссылок на проекты и т.д, например user = {name: 'вася, folders: [... {title: 'project1', tasks: [... {title: 'task1', comments: [... {text: 'comment1'}]}]} ]}
а вообще, какую проблему мы решаем этим? Ну в смысле, если тебе надо как-то историю отслеживать, то варианты у тебя есть всякие разные, но есть самый прямой. Если тебе просто надо как-то замоделить предметную область, то это совсем другой разговор. Нельзя так просто топить за одно или за другое. В чём, собственнно, проблема то?

Ywein
23.06.2017
20:57:32
там же ссылки, у каждого юзера есть массив ссылок на проекты и некоторые объекты будут совпадать
ну я не могу что-то советовать не зная подробностей но на вскидку выглядит как проблема чрезмерной денормализации все же.

Дмитрий
23.06.2017
21:00:05
И еще она подразумевает бесконечное хранение всех состояний
Вообще не подразумевает, всё сильно зависит от реализации и требований

А алгоритмы, склонные к stack overflow можно записывать иначе

Vladimir
23.06.2017
21:02:41
В такой формулировке - подразумевает

Max
23.06.2017
21:04:55
а вообще, какую проблему мы решаем этим? Ну в смысле, если тебе надо как-то историю отслеживать, то варианты у тебя есть всякие разные, но есть самый прямой. Если тебе просто надо как-то замоделить предметную область, то это совсем другой разговор. Нельзя так просто топить за одно или за другое. В чём, собственнно, проблема то?
Проблема в том что с редаксом и его иммутабельностью несколько неудобно моделировать и разрабатывать бизнес-логику когда много сущностей и связей между объектами. Циклические ссылки так вообще нельзя хранить когда у проекта есть много тасков и каждый таск имеет свойство со ссылкой на проект. Единственный выход это нормализация но кроме сложностей с обновлением есть другой огромный недостаток - нужно каждый раз вытаскивать каждый объект по его айдишнику из глобального стора - а это очень сильно мусорит код - сравните getUser(getFolder(getProject(getTask(comment.taskId).pojectId).folderId).userId).nameв редаксе с comment.task.project.folder.user.name в мобиксе

Yumi
23.06.2017
21:19:12
C иммутабельностью сложно разработать некоторую бизнес-логику. Вот придумал такой кейс - у объекта юзера есть массив папок у каждой папки массив проектов у каждого проекта массив тасков и у каждого таска массив комментариев. И теперь юзер отредактировал какой-то комментарий - с мутабельностью все просто - берем и меняем на новое значение comment.text = newValue. А как с иммутабельностью? Нужно создать новый объект комментария, создать новый массив комментариев, перекопировать отстальные комментарии, создать новый массив тасков, перекопировать остальные таски, создать новый массив проектов, перекопировть остальные проекты и наконец создать новый массив папок, перекопировать и создать новый объект юзера. Это же медленнее в тысячи раз.
а) Ну обычно такое хранит бек, а ты уже подгружает, что тебе нужно, выходит не глубокая структура. б) линзы

Google
Yumi
23.06.2017
21:32:15
И еще она подразумевает бесконечное хранение всех состояний
Я правильно понял, что если иммутабельные данные один раз создаются, то больше никогда не покидают своё место в памяти и ссылку на них тоже нельзя стереть? Это имеется введу под бесконечным хранением?

Vladimir
23.06.2017
21:32:51
Не совсем

Хранятся все состояния, если хранится последнее

Yumi
23.06.2017
21:33:57
Типо как история?

В immutable.js подобное реализовано?

Дмитрий
23.06.2017
21:35:03
Забавно

Vladimir
23.06.2017
21:35:04
Нет

Yumi
23.06.2017
21:40:45
Я просто подумал, что в других языках может быть иначе.

Alex
23.06.2017
21:41:25
Ywein
23.06.2017
21:42:14
есть же https://github.com/paularmstrong/normalizr
иногда денормализация удобней, просто она должна быть продуманная и ограниченная

Nikolay
23.06.2017
21:42:38
ну ты в стейте хранишь плоское дерево, а потом выгибаешь его в нужную структуру

Alex
23.06.2017
21:43:16
Хранятся все состояния, если хранится последнее
А насчёт бесконечного хранения тоже не правда. Достаточно на каком-то витке эволюции собирать все изменения в кучу

Vladimir
23.06.2017
21:43:34
Нельзя

На любое состояние могут быть ссылки

Alex
23.06.2017
21:44:41
Ну и пусть себе будут.

Nikolay
23.06.2017
21:45:03
а никто не задумывается что это может хорошо кушать память? )

когда у тебя приложенькой пользуются 24/7

Google
Alex
23.06.2017
21:45:45
Как только пропадут gc их соберёт.

Nikolay
23.06.2017
21:45:49
получается же на каждое действие создается новая структура

Как только пропадут gc их соберёт.
не ну если поддерживается time traveling то получается гдето же лежат ссылки на предидущие стейты?

Alex
23.06.2017
21:46:40
получается же на каждое действие создается новая структура
Ну мы тут как раз выясняем, что этот процесс таки может быть оптимизирован))))

Ну он же тоже не вечный

Но вообще память-то конечно обычно жрется

Но, в общем, такая вот цена тайм-тревела, например

Vladimir
23.06.2017
21:49:56
Просто в жизни используются другие структуры

Nikolay
23.06.2017
21:52:29
почему?

Дмитрий
23.06.2017
21:52:32
Просто в жизни используются другие структуры
Хорошо когда уверенно можешь говорить за себя, за меня и за того парня ?

Alex
23.06.2017
21:52:45
Vladimir
23.06.2017
21:53:46
Жизнь разная, но некоторые стуктуры непрактичны

Pavel
23.06.2017
21:54:17
Можно вообще обойтись только компонентами-функциями)
А как быть с componentDidMount и componentWillGetProps (или как они называются)?

Nikolay
23.06.2017
21:55:26
а зачем они тебе? )

что ты туда суешь обычно?

Pavel
23.06.2017
21:56:29
При лямбдах из дочерних классов такие методы недоступны
Дочерние классы не нужны. Это JS, тут class - просто удобный способ объекты делать, а не основа ООП.

Max
23.06.2017
21:57:34
Дочерние классы не нужны. Это JS, тут class - просто удобный способ объекты делать, а не основа ООП.
Я когда спрашиваю чего-то мнения то ставлю вопросительный знак в конце предложения

Alex
23.06.2017
21:57:34
Дочерние классы не нужны. Это JS, тут class - просто удобный способ объекты делать, а не основа ООП.
О, теперь можно снова спросить, нафига все топят за class вместо createClass :))

Google
Nikolay
23.06.2017
21:58:45
Дмитрий
23.06.2017
21:58:48
А как быть с componentDidMount и componentWillGetProps (или как они называются)?
Есть lifecycle в recompose. А так же, эти методы чаще всего требуются контейнерам, их можно сделать по старинке

Pavel
23.06.2017
21:58:50
C иммутабельностью сложно разработать некоторую бизнес-логику. Вот придумал такой кейс - у объекта юзера есть массив папок у каждой папки массив проектов у каждого проекта массив тасков и у каждого таска массив комментариев. И теперь юзер отредактировал какой-то комментарий - с мутабельностью все просто - берем и меняем на новое значение comment.text = newValue. А как с иммутабельностью? Нужно создать новый объект комментария, создать новый массив комментариев, перекопировать отстальные комментарии, создать новый массив тасков, перекопировать остальные таски, создать новый массив проектов, перекопировть остальные проекты и наконец создать новый массив папок, перекопировать и создать новый объект юзера. Это же медленнее в тысячи раз.
А не надо вложенные объекты делать. Относись к хранилища редакса как к базе данных, где сущности по id связаны. И твой вопрос отпадёт сам собой.

Alex
23.06.2017
22:00:12
я же уже видос кидал почему createClass говно )
А, ну там непонятна история :) Если дело действительно в экономии на биндах, то это классный синтетический тест, который ничего не даёт в реальном использовании :)

Nikolay
23.06.2017
22:01:18
ну в видосе чувак пытался ускорить рендер для сервера, после замены createClass на обычные классы получил прирост производительности, впринципе оно и понятно почему

Evgenii
23.06.2017
22:01:55
Mybitcoin - Блог о Криптовалюте и способах на ней заработать! @faucetclub

Max
23.06.2017
22:02:27
@sergeysova

Admin
ERROR: S client not available

Yumi
23.06.2017
22:02:45
Заклинание.

Alex
23.06.2017
22:03:39
ну в видосе чувак пытался ускорить рендер для сервера, после замены createClass на обычные классы получил прирост производительности, впринципе оно и понятно почему
Не, не понятно почему. Он сказал что не знает. И я не знаю. Но если дело в биндах, то в реальном использовании разница будет минимальна. Потому что то, что не забиндится руками, будет забиндено бабелем. Или как там он ещё захватывает контекст.

Ну по крайней мере у нас, непередовых крестьян, Бабель все это по прежнему в старый добрый es5 собирает на фронте :)

Pavel
23.06.2017
22:05:50
а зачем они тебе? )
Данные с сервака получаю при инициализации компонента

Nikolay
23.06.2017
22:06:01
не ну под капотом class MyFoo {} трансформится в обычную функцию

Nikolay
23.06.2017
22:07:06
данные с сервака должен получать экшн, а ты в компоненте должен реагировать на пропсы и показывать лоадер или не показывать

экшн должен вызывать HOC

Alex
23.06.2017
22:07:50
не ну под капотом class MyFoo {} трансформится в обычную функцию
Ну, вот я и говорю, что оно в итоге и получается как createClass, который работает очевидно и прямо, только без упражнений со стрелочными функциями и упражнениями на понимание оттранспиленного кода)

Google
Nikolay
23.06.2017
22:08:56
ну на самом деле createClass уже deprecated

Pavel
23.06.2017
22:09:31
экшн должен вызывать HOC
Ушёл читать про это, спасибо

Alex
23.06.2017
22:12:07
ну на самом деле createClass уже deprecated
Это да. Мне просто не до конца понятна мотивация. Я использую классы не для реакта - это удобно. Но в реакте мне очень непонятно зачем оно так. Собственно большую разницу вижу ровно в одном - бинд. В первом случае он простой и понятный, во втором... ну есть способы, да. Но как-то не выглядит шагом вперёд

Nikolay
23.06.2017
22:13:20
т.е для тебя классы менее понятны чем какая то функция в которую что то надо передавать?

напоминает времена когда каждый городил свою реализацию классов как умел

Alex
23.06.2017
22:17:33
т.е для тебя классы менее понятны чем какая то функция в которую что то надо передавать?
Для реакта - да. Нормальные гомогенные лайфсайкл методы, никаких стрелочных функций в классе ( ну класс, в нем же вообще методы надо бы писать, а не члены, которым вешать анонимные функции без контекста).

Nikolay
23.06.2017
22:18:07
как это без контекста

в них есть контекст

он наследуется просто )

Alex
23.06.2017
22:18:32
У стрелочных-то?)

Nikolay
23.06.2017
22:18:38
yep

Max
23.06.2017
22:18:41
Вторым параметром тащемта

А стоп. А задать как ?

Alex
23.06.2017
22:20:12
Ну в общем понятно, что прогресс не остановить, но мне странно :)

Max
23.06.2017
22:20:33
Контекст

Alex
23.06.2017
22:22:32
Вообще никак. Он из окружающей области видимости подъезжает

Nikolay
23.06.2017
22:22:42
это называется "lexical this"

this наследуется из лексического окружения где была определена функция

Max
23.06.2017
22:23:46
Я не про скоупы

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