@react_js

Страница 5081 из 5115
Сергей
25.10.2018
02:27:50
Ты рассматриваешь стор как единое состояние приложения или как примитив, который отвечает за конкретную часть глобального стейта?
один из кейсов который меня волнует, это восстановление процессов логики, при запуске приложения из дампа

Andrey
25.10.2018
02:28:29
скорее как единое состояние приложение чтобы можно было именно от стора отрендерить приложение и получить нужный вид чтобы хоть тесты всего приложения гонять на этом
Смотри. Единое состояние приложения в случае эффектора от тебя скрыто. Тебе не надо об этом беспокоиться. Ты именно конструируешь слой доступа к этому глобальному стейту. Как раз то, что ты хочешь.

Сергей
25.10.2018
02:29:03
Я допускаю. Но я вторую вещь так и не увидел на примерах
я рассказываю концепцию разделения приложения на три части если буду показывать свои попытки реализовать апи, ты скажешь что идея говно и забьешь, даже не попытавшись понять всю концепцию

Kelin
25.10.2018
02:29:22
Любой псевдокод, который покажет, как компонент берет данные из стора и как логика взаимодействует со стором

Google
Kelin
25.10.2018
02:29:34
Так, что при изменении одного из трех, не нужно менять все остальное

Сергей
25.10.2018
02:29:46
Смотри. Единое состояние приложения в случае эффектора от тебя скрыто. Тебе не надо об этом беспокоиться. Ты именно конструируешь слой доступа к этому глобальному стейту. Как раз то, что ты хочешь.
у эффектора есть апи для конструирования именно этого слоя доступа для вьюхи? чтобы не подписывать на конкретные сторы, а подписать на условный интерфейс

да

Что-то типа такого? function() { incrementI() if (getI() > 5) { alert(); } }

Что-то типа такого? function() { incrementI() if (getI() > 5) { alert(); } }
вот этот псевдокод ровно то, что я хочу

Andrey
25.10.2018
02:30:35
у эффектора есть апи для конструирования именно этого слоя доступа для вьюхи? чтобы не подписывать на конкретные сторы, а подписать на условный интерфейс
У тебя createStore и является этим интерфейсом. Да, может быть апи и кривоватое. Я ещё не полностью его переварил, но концепция как раз то, что ты описываешь.

Сергей
25.10.2018
02:31:33
У тебя createStore и является этим интерфейсом. Да, может быть апи и кривоватое. Я ещё не полностью его переварил, но концепция как раз то, что ты описываешь.
но я не могу в этом апи делать условный getCounter() (не увидел по крайней мере) и делать условный setCounter(value) с возможностью подмены стора, на другой по структуре, но с таким же слоем доступа

Сергей
25.10.2018
02:32:31
Здесь уже провал в абстракции эффектора. Мемчанский отстаивает позицию, что у стора нет локальности.
ну вот опять вернулись к фундаментальной конструкции. я не говорю, что это плохо. просто мне не нравится

Andrey
25.10.2018
02:33:02
А если вообще конструировать стор с локальностью, то там пипец какие проблемы с описанием апи.

Kelin
25.10.2018
02:33:14
Если я правильно понял, то 1) Стор пилит методы, которые меняют стор 2) Есть какой-то "компьютед", который, независимо от изменений организации, возвращает всегда стейт одного формата Но в таком случае, здесь даже не один бойлерплейт, а два. Пилить методы на каждый i++ и преобразовывать стейт при каждом изменении структуры стора к одному виду

Google
Andrey
25.10.2018
02:33:36
И придётся завязываться на view-либу, потому что мы с помощью неё строим дерево компонентов.

А это мне оооочень не нравится.

Andrey
25.10.2018
02:34:42
также как react-redux effector-redux
У тебя там нет завязки на view) Ты руками разрешаешь локальность с помощью айдишников)

Я поэтому и хочу пробрасывать key в компонент, чтобы переложить генерацию key на стор, чтобы человеку не прешлось с этой говной возиться.

Сергей
25.10.2018
02:35:26
Если я правильно понял, то 1) Стор пилит методы, которые меняют стор 2) Есть какой-то "компьютед", который, независимо от изменений организации, возвращает всегда стейт одного формата Но в таком случае, здесь даже не один бойлерплейт, а два. Пилить методы на каждый i++ и преобразовывать стейт при каждом изменении структуры стора к одному виду
ты правильно понял. я ищу способы решения этих кейсов, по идее это решаемо через прямую апишку. но опять же как мы все понимаем, такого не будет часто, кейс такого подхода в переиспользуемости стора по всеми приложению, в том числе в тестах и внутри вложенной логики

Andrey
25.10.2018
02:36:55
вот тут я не понял про айдишники
Кейс arr.map(a => <A a={a} />) с локальными сторами у A и <><A/><A/></>

Без этого смысла пилить замену эффектору просто нет.

Сергей
25.10.2018
02:37:25
Andrey
25.10.2018
02:37:41
а, ну тут да, также как в react-redux
Вот, а я хочу переложить это на стор.

Kelin
25.10.2018
02:37:49
Кейс arr.map(a => <A a={a} />) с локальными сторами у A и <><A/><A/></>
Вот, собственно, единственная проблема эффектора, кек

Сергей
25.10.2018
02:37:55
Andrey
25.10.2018
02:38:19
Вот, собственно, единственная проблема эффектора, кек
Это единственная и фундаментальная проблема. Для её решения потребуется выкинуть абсолютно всё апи эффектора.

Сергей
25.10.2018
02:38:25
Вот, собственно, единственная проблема эффектора, кек
а ещё то, что я не могу описывать чистый бизнес-кейс

Andrey
25.10.2018
02:38:30
на либу связку?
Да, на биндинги стора к реакту.

Сергей
25.10.2018
02:38:40
Да, на биндинги стора к реакту.
вот тут это уместно, да

Andrey
25.10.2018
02:38:55
Но фишка в том, что стор надо проектировать именно от биндингов, а не наоборот.

Сергей
25.10.2018
02:39:26
Но фишка в том, что стор надо проектировать именно от биндингов, а не наоборот.
такое. запроектировал для реакта, а для других либ юзать не можешь толку то

Kelin
25.10.2018
02:39:43
Это единственная и фундаментальная проблема. Для её решения потребуется выкинуть абсолютно всё апи эффектора.
Это можно решить вне контекста вьюхи, но притягивать к вьюхе геморрно. И дело даже не в том, что ты считаешь проблемой

Google
Сергей
25.10.2018
02:39:58
кстати, как в эффекторе с тестированием логики?

Andrey
25.10.2018
02:40:18
такое. запроектировал для реакта, а для других либ юзать не можешь толку то
Здесь больше не реакт, а те кейсы, которые возникают. Типа двух выше, которые я описал.

Artyom
25.10.2018
02:40:34
Вот, а я хочу переложить это на стор.
а зачем, тогда, нужен будет virtual dom реакта?

Andrey
25.10.2018
02:40:34
И если удасться решить проблему, то сразу решается проблема с ssr.

а зачем, тогда, нужен будет virtual dom реакта?
Не понимаю вопроса. Распиши, пожалуйста.

Kelin
25.10.2018
02:41:27
Ты сделал <A /> То есть создал новый "стейт" Скажем, это форма При нажатии кнопки закрыть, компонент анмаунтится и удаляется запись При нажатии кнопки сохранить, компонент анмаунтится и сохраняется запись А еще, что будут делать компоненты на вложенности? Откуда они будут брать стор? Как они поймут, какой стор брать? Я придумал решение на контекстах, но оно тоже просасывает на сложных кейсах

Artyom
25.10.2018
02:42:56
Не понимаю вопроса. Распиши, пожалуйста.
Ну я так понимаю качественно реактивные сторы могут предоставлять на столько точечные подписки, что если обновление до view дошло - можно мержить в реальный дом. Но при этом остается проблема со списками, когда аппенд 1 элемента заставляет пересчитать весь список - тут уже весь список в дом дорого класть

Artyom
25.10.2018
02:44:13
Не понимаю вопроса. Распиши, пожалуйста.
Кстати, я уже описывал тут идею. Если разделить список на множество мелких списков и по отдельности за ними следить, то проблема производительности "вставки" списка в дом должна уйти

Kelin
25.10.2018
02:44:17
?
А что тебя интересует? Просто апи настолько простое, что я даже хз, какие проблемы могут быть

Сергей
25.10.2018
02:45:31
Andrey
25.10.2018
02:45:45
почему это!?
Делай список на основе дерева и рендери его.

Сергей
25.10.2018
02:45:48
а как тестить случай, с эффектами и зависимостями сторов?

Andrey
25.10.2018
02:46:32
почему это!?
Потому что для этой проблемы нет решения без добавления в сам реакт списка на основе деревьев. Тупо енумерабл не даёт тебе апи, который позволит рендерить всё эффективно.

а как тестить случай, с эффектами и зависимостями сторов?
Для тебя импорт интересующих сторов и вызова эффекта устроит с последующей проверкой значений в сторах?)

Google
Kelin
25.10.2018
02:49:25
effect.use(fakeRequest)

Сергей
25.10.2018
02:49:52
effect.use(fakeRequest)
что-то меня в этом смущает, пока не пойму что

а, точно, паралелльные тесты не будут работать

Kelin
25.10.2018
02:50:06
то, что ответ запроса надо возвращать в нем

Artyom
25.10.2018
02:51:07
Потому что для этой проблемы нет решения без добавления в сам реакт списка на основе деревьев. Тупо енумерабл не даёт тебе апи, который позволит рендерить всё эффективно.
Да просто map должен быть не массивный а свой, в стиле редуса... Ну не важно. Вопрос в том, что, казалось бы, еще шажок и стейт-менеджера будет достаточно для полной замены реакта. Но, если подумать, у нас просто получается ангуляр =D Но у ангуляра свои проблемы. Какой компромис между этим? Нужна декларативная реактивность. Эффектор мне, все же, кажется не достаточным в этом плане

Сергей
25.10.2018
02:51:14
Почему?
test(‘foo’, async t => { effect.use(stub().returns(2)) // if i call effect() here, what stub would called }) test(‘bar’, async t => { effect.use(stub().returns(3)) })

Admin
ERROR: S client not available

Kelin
25.10.2018
02:52:07
test(‘foo’, async t => { effect.use(stub().returns(2)) // if i call effect() here, what stub would called }) test(‘bar’, async t => { effect.use(stub().returns(3)) })
Попахивает говнецом. Если тебе для разных тест кейсов нужен разный stub, то тут даже хз что сказать

Сергей
25.10.2018
02:52:10
Недогоняю.
параллельные тесты запускаются одновременно а effect.use это просто замена содержимого

Kelin
25.10.2018
02:52:23
effect.use(payload => result)
так мб понятнее будет

effect(payload)

Artyom
25.10.2018
02:52:41
объявление эффекта статическое и use глобальный. Все из-за того же проблемы с ssr

Сергей
25.10.2018
02:52:50
Попахивает говнецом. Если тебе для разных тест кейсов нужен разный stub, то тут даже хз что сказать
ммм)) ну да тестить же эффект который вернул корректный результат и ошибку не надо

Andrey
25.10.2018
02:52:59
А, вот ещё косяк, да.

Сергей
25.10.2018
02:53:06
так мб понятнее будет
то есть ты не понял, да)

Google
Andrey
25.10.2018
02:53:12
Не думал, кстати, над этим.

Сергей
25.10.2018
02:53:25
я статически заменяю значение в эффекте ОДНОВРЕМЕННО из нескольких тестов

так работают параллельные тесты

Kelin
25.10.2018
02:53:41
ммм)) ну да тестить же эффект который вернул корректный результат и ошибку не надо
че effect.use(payload => fetch('/zalupa')) const res = await effect(payload) expect(res.result).toBe(...) expect(res.error).toBe(...)

Сергей
25.10.2018
02:53:54
а теперь напиши мне 5-10 таких тестов

и гарантируй что будет всё ок

Artyom
25.10.2018
02:54:08
2 достаточно

Andrey
25.10.2018
02:54:19
Ну чего ты как маленький?)

Сергей
25.10.2018
02:54:26
Запускаешь 10 нод.
“параллельные” да)

Kelin
25.10.2018
02:54:51
и что произойдет? типа до вызова эффекта второй юз прокнет?

Kelin
25.10.2018
02:55:45
ну с этим хз. я не гуру тестов

Artyom
25.10.2018
02:56:18
че effect.use(payload => fetch('/zalupa')) const res = await effect(payload) expect(res.result).toBe(...) expect(res.error).toBe(...)
типо падажите, так тут уже инициированный эффект и в инстансе можно делать что угодно ?

и гарантируй что будет всё ок
чет я не вижу проблему в этом кейсе

Kelin
25.10.2018
02:57:00
я вот тоже не понимаю. как в изолированном тесте может прокнуть юз из другого теста

Kelin
25.10.2018
02:57:20
если только какой-нить таймаут

Artyom
25.10.2018
02:57:39
я вот тоже не понимаю. как в изолированном тесте может прокнуть юз из другого теста
ну тебе вызов каждого эффекта нужно мокать строго перед вызовом. Нельзя сначала замокать, а потом вызывать асинхронно

А вообще все норм

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