@react_js

Страница 2264 из 5115
andretshurotshka?❄️кде
07.10.2017
16:20:36
А ну мб

Алексей
07.10.2017
16:20:59
нужно лишь отслеживать их изменения (привет, mobx)

так что по моему мнению, субд для фронтенда - это как реактивный двигатель для велосипеда: сложно, громоздко и не нужно

а то найдутся умельцы-идиоты, которые ORM запилят поверх этой СУБД

Google
andretshurotshka?❄️кде
07.10.2017
16:22:49
redux orm))))

можешь развернуть? Как хранить в редаксе без нормализации?

или это конкретно про mobx

Алексей
07.10.2017
16:27:19
думаю, что никак

хотя

можно денормализованно хранить

хотя это так себе

просто стор редакса - это дерево со всеми его ограничениями

никаких циклических ссылок

да ещё и иммутабельность

Dmitry
07.10.2017
16:30:32
ну так как решить траблу с вложенными данными при этом не делая нормализацию ?

Алексей
07.10.2017
16:31:49
ну так как решить траблу с вложенными данными при этом не делая нормализацию ?
два варианта всего: денормализация или циклические ссылки

Google
Dmitry
07.10.2017
16:32:34
и как это поможет трекать изменения ?

Алексей
07.10.2017
16:32:42
для редакса только денормализация доступна: одни и те же данные в разных местах

и как это поможет трекать изменения ?
трек изменений - это вообще отдельная задача

и это тут не причём, главная забота - сделать стор удобным для всевозможных операций

в редаксе это как раз не очень удобно сделано

Dmitry
07.10.2017
16:35:29
Зато мобх тяжелее дебажить и репродьюсить

Алексей
07.10.2017
16:36:13
Зато мобх тяжелее дебажить и репродьюсить
mobx state tree, насколько я знаю, решает эти проблемы

даже с redux-devtools интегрируется

Dmitry
07.10.2017
16:36:26
да, но из-за него оверхед в разы возрастает

инит тайм большой

куча ограничений

с типизацией

либы для мобх с ним не работают

Алексей
07.10.2017
16:37:34
в редаксе это как раз не очень удобно сделано
например, если в сложном экшене мне нужно не только изменить данные задиспатчив , но и получить их, то я непременно должен знать их точное положение в стейте (ну или селектор должен знать)

да, но из-за него оверхед в разы возрастает
сомневаюсь, что там оверхед такой уж большой

Dmitry
07.10.2017
16:38:19
перед выбором между мобх и редаксом для проекта

тестили все это

на среднем для проекта обьекте

Алексей
07.10.2017
16:38:58
и на сколько миллисекунд тесты медленнее для mobx-state-tree были?

Dmitry
07.10.2017
16:39:03
и он инитился оч долго

Google
Алексей
07.10.2017
16:39:20
Dmitry
07.10.2017
16:39:21
редукс с нормализаций 60мс а мобх стейт три 500

Алексей
07.10.2017
16:39:47
ну чёт долго, да

Dmitry
07.10.2017
16:39:47
при это на клиент еще оверхед в виде 130 кб

конечно дальше оно быстрее работало с мобх

Алексей
07.10.2017
16:40:41
это не так много на самом деле, даже для мобильного инета

Dmitry
07.10.2017
16:40:41
но из-за инит тайма и неустоявшегося апи стейт три решили выбрать редукс

плюс редукс по размерам меньше весит и не привности такого большого оверхеда

Но вот если пилить что-то типа црмки, то тут лучше мобх

Алексей
07.10.2017
16:43:11
ну не знаю, для меня, по крайней мере, выбор между быстродействием и удобством вполне очевиден, и не в пользу быстродействия а юзерам придётся подождать лишнюю полсекунду

хотя mobx тоже не идеален далеко

с его механизмом подписок осторожно надо обращаться

Алексей
07.10.2017
16:45:08
я когда игрался с ним, то выстреливал себе в ногу из-за этого

Max
07.10.2017
16:48:55
редукс с нормализаций 60мс а мобх стейт три 500
а на камом бенчмарке меряли? можно пример?

Dmitry
07.10.2017
16:49:42
benchmark.js и плюс руками тестили примерно похожий код

так что выводы с этих тестов могут быть не совсем справедливыми

Max
07.10.2017
16:50:46
я имею ввиду код теста, какие компоненты, какое состояние

Dmitry
07.10.2017
16:51:17
та просто закинули в бенчмарк жс createState и mst.create()

Max
07.10.2017
16:56:17
так что выводы с этих тестов могут быть не совсем справедливыми
Если код теста закрыт и тут его не показать, то могу попробовать предложить померять вариант с использованием простого общего мутабельного состояния с вложенностью (как я выше писал) - точно такое же как в мобиксе но только без всяких обзерваблов и без всякого мобикса и когда нам нужно что-то изменить мы меняем свойство - comment.text = 'new text' и вызываем update() - функцию которая делает перерендер всего приложения - ReactDOM.render(<App/>, rootEl). У меня есть мысль что оверхед на работу состояния будет большим чем чистые мутируемые объекты и перерендер(точнее перепроверка потому что виртуал-дум) всего приложения будет быстрее

Google
Dmitry
07.10.2017
16:57:05
я не говорю про работу и перерендер

а просто про инит тайм

Max
07.10.2017
16:59:01
тем более если инит тайм - мобиксу ведь нужно на каждое свойство поставить геттеры и сеттеры и создать внутренние обзерваблы

Dmitry
07.10.2017
16:59:40
у нас такая специфика была что перерендер особо не был критичен

а важно было инит тайм и вес

Max
07.10.2017
17:03:23
а важно было инит тайм и вес
в этом варианте стейт-мененджера вообще нет, так что по весу это лучший вариант) и инит тайм будет быстрее чем с мобиксом

Dmitry
07.10.2017
17:03:49
ну как бы у нас в старом проекте такое и было

самописнео

и его тяжело дебажить и поддерживать

Max
07.10.2017
17:15:24
и его тяжело дебажить и поддерживать
Блин, ну что значит дебажить и поддерживать - все точно такое же как с мобиксом но только без декораторов и мобикса, вот из примера выше - состояние точно такое же const AppState = new class { width; height; ..... user = new User(); } class User { name = ''; email = ''; ..... folders = []; } class Folder { name = ''; ... projects = []; } class Project { name = ''; ... tasks = []; } class Task { text = ''; .... }копоненты точно так же будут передавать только нужный объект function App({appState}){ return ( <div> <div>{appState.user.name}</div> <div> {appState.user.folders.map(folder=><Folder folder={folder})/>} </div> </div> ) } function Folder({folder}){ return ( <div> <div>{folder.name}</div> <div> {folder.projects.map(project=><Project project={project})/>} </div> </div> ) } function Project({project}){ return ( <div> <div>{project.name}</div> <div> {project.tasks.map(task=><Task task={task})/>} </div> </div> ) } function Task({task}){ return ( <div> <div>{task.text}</div> </div> ) }никакого отличия от мобикса разве что компоненты не нужно врапить в @observer декоратор единственное отличие это только при измении свойства или добавления/удаления из массива нужно вызвать дополнительную функцию update которая будет делать перерендер всего приложения import {update} from './utils'; .... onCommentEditSaveButton = (e)=>{ this.props.comment.text = e.target.value; update(); } .... //util.js export function update(){ ReactDOM.render(<App/>, rootEl) }и получем точно такую же работу с состоянием как в мобиксе только без мобикса. Какие тут могут быть проблемы с дебагом или поддержкой?

Admin
ERROR: S client not available

Dmitry
07.10.2017
17:16:07
в том что мобх не удобно дебажить ?

как и это самописное



вообще не оч понимаю к чему это все

Max
07.10.2017
17:18:33
в том что мобх не удобно дебажить ?
речь ведь идет про самописное решение, в моем примере выше самописного решения все просто и прозрачно, и нет никаких обзерваблов и всяких неочевидных сложностей и моментов

Dmitry
07.10.2017
17:19:04
Я говорил про наше самописное решение которое в нашем проекте

и если продолжать писать в таком духе это выйдет редукс

только хуже

Max
07.10.2017
17:20:14
Я говорил про наше самописное решение которое в нашем проекте
а чем оно отличается от моего примера? просто если вы решили пойти по пути иммутабельности то это просто получился еще один редакс со всеми его проблемами

Google
Dmitry
07.10.2017
17:20:39
У нас вышло что-то типа мобх

с глобальным методом апдейт пропс

который по какому-то елементу апдейтит

ну там долгая история

Алексей
07.10.2017
17:41:54
Блин, ну что значит дебажить и поддерживать - все точно такое же как с мобиксом но только без декораторов и мобикса, вот из примера выше - состояние точно такое же const AppState = new class { width; height; ..... user = new User(); } class User { name = ''; email = ''; ..... folders = []; } class Folder { name = ''; ... projects = []; } class Project { name = ''; ... tasks = []; } class Task { text = ''; .... }копоненты точно так же будут передавать только нужный объект function App({appState}){ return ( <div> <div>{appState.user.name}</div> <div> {appState.user.folders.map(folder=><Folder folder={folder})/>} </div> </div> ) } function Folder({folder}){ return ( <div> <div>{folder.name}</div> <div> {folder.projects.map(project=><Project project={project})/>} </div> </div> ) } function Project({project}){ return ( <div> <div>{project.name}</div> <div> {project.tasks.map(task=><Task task={task})/>} </div> </div> ) } function Task({task}){ return ( <div> <div>{task.text}</div> </div> ) }никакого отличия от мобикса разве что компоненты не нужно врапить в @observer декоратор единственное отличие это только при измении свойства или добавления/удаления из массива нужно вызвать дополнительную функцию update которая будет делать перерендер всего приложения import {update} from './utils'; .... onCommentEditSaveButton = (e)=>{ this.props.comment.text = e.target.value; update(); } .... //util.js export function update(){ ReactDOM.render(<App/>, rootEl) }и получем точно такую же работу с состоянием как в мобиксе только без мобикса. Какие тут могут быть проблемы с дебагом или поддержкой?
можно завести декоратор для сеттеров и методов @action, который будет вызывать update тогда чуть красивее получится

Max
07.10.2017
17:54:35
можно завести декоратор для сеттеров и методов @action, который будет вызывать update тогда чуть красивее получится
@action не работает с асихронностью, наример мы в приложении сделали setTimeout, из метода вышли, @action вызовет update(), а когда отработает таймаут апдейт уже вызывать некому

Алексей
07.10.2017
17:55:11
а хотя

стоп

я погорячился

хотя

можно сделать так как я предложил, но нужно кое-что в архитектуре соблюдать

Valery
07.10.2017
17:56:39
гайз, что означает термин middleware?

Алексей
07.10.2017
17:57:44
то есть если выносить те асинхронные операции, окончания которых требуют ререндера, в отдельные методы с декоратором, тогда всё норм будет

Dmitry
07.10.2017
17:58:02
гайз, что означает термин middleware?
https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%8F%D0%B7%D1%83%D1%8E%D1%89%D0%B5%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5

Artyom
07.10.2017
18:04:02


Max
07.10.2017
18:05:22
то есть если выносить те асинхронные операции, окончания которых требуют ререндера, в отдельные методы с декоратором, тогда всё норм будет
но это куча лишней работы, когда же update - хоть и чуть-чуть больше печатать явно говорит что вот мы в этом месте делаем перерендер компонентов, мы можем сколько угодно менять состояние, делать массовые операции а обновление будем вызывать только один раз когда нужно.

Dmitry
07.10.2017
18:05:46
если папка в корне то просто node_modules

Artyom
07.10.2017
18:05:53
не в корне

в этом и проблема

Dmitry
07.10.2017
18:06:09
слэш забыл значит

Artyom
07.10.2017
18:06:15
все файлы (и гитигнор) в /front

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