
Vladimir
27.08.2017
09:29:12
паттерн Command не вчера придумали

Nikita
27.08.2017
09:30:02
о! кидание паттернами началось
большая часть придуманных паттернов связана со специфическим подходом к ООП в C++ и Java


Pavel
27.08.2017
09:36:03
Если прикрутить поверх фунционального решения (React), штуку с императивным интерфейсом (MobX), то это конечно даст выигрышь в кратковременной перспективе. Не нужно ни с чем новым разбираться. Мутация данных делается привычными присваиваниями значений. Данные классами описываются.
Только это все перпендикулярно подходу использованному в React. В нем не просто так избавились от императивных апдейтов DOM. Если кто-то думаю, что это для того что бы оптимизировать скорость рендеринга, то нет, это не так. Не скажу, что полностью доволен Redux, но он по крайней мере развивает идеи реакта, а не вводит обратно императивность.
В итоге, многие задачи в Redux решаются маленькими middleware, которые даже можно написать самому. Попробуйте просто решить в MobX задачу менеджмента user history (undo, redo etc.), сериализации и десериализации данных. Сравните с тем, как это сделано в Redux.
React абсолютно не функциональное решнние, этот 100% императивное решение. Анду, реду это редкий кейс, который решается легко и без redux и без mobx.

Google

Nikita
27.08.2017
09:36:40
Это не так.

Vladimir
27.08.2017
09:37:08
ну чтобы сделать undo, тебе придется в любом случае сделать структуру данных, описывающую действие, функцию для действия и функцию, отменяющую действие.

Nikita
27.08.2017
09:37:26
зачем?

Vladimir
27.08.2017
09:38:38
затем, что иначе две трети твоего времени уйдет на то, чтобы отделить те данные, которые подвержены undo/redo от тех, которые не подвержены

Nikita
27.08.2017
09:39:31
это проще, чем команды писать

Vladimir
27.08.2017
09:39:39
нет

Nikita
27.08.2017
09:39:41
да

Pavel
27.08.2017
09:39:51
Это не так.
Я посмотрю как ты будешь с лёгкостью делать, анду реду в реальном мире на redux, когда тебе это все надо будет синхронизировать с сервером. Я думаю ты изменишь свои взгляды на редакс )

Nikita
27.08.2017
09:41:36
это легко делается с какой-то JS state management библиотекой?

Vladimir
27.08.2017
09:41:58
ты это делал?

Nikita
27.08.2017
09:42:21
это ответ на мой вопрос?

Pavel
27.08.2017
09:43:20

Nikita
27.08.2017
09:43:25
именно так

Google

Nikita
27.08.2017
09:43:36
но речь идет о сравнении редакса с мобиксом
я параллельно посмотрел, как кто делает хистори в mobX
пример от Formidable меня убедил

Pavel
27.08.2017
09:44:55

Nikita
27.08.2017
09:46:09
в моем случае не редкий
но не важно
я уже нашел пример на MobX, который меня устраивает

Pavel
27.08.2017
09:47:02

Nikita
27.08.2017
09:47:17
так и ваши случаи не показатель, что MobX круче для всех :)

Pavel
27.08.2017
09:47:43

Nikita
27.08.2017
09:47:59
с тем, что какое-то отдельное решение не для всего и не для всех я полностью согласен

Pavel
27.08.2017
09:48:17

Nikita
27.08.2017
09:48:25
уважаю
я если ситуация позволит от JS откажусь

Pavel
27.08.2017
09:52:42
Mobx хорош и явно лучше чем redux, в качестве транспорта по доставке изменений в компонент

Nikita
27.08.2017
09:54:17
ты про количество кода, который надо писать и читать?

Denis
27.08.2017
09:55:03

Nikita
27.08.2017
09:55:11
я серьезно

Denis
27.08.2017
09:56:41

Nikita
27.08.2017
09:56:55
ClojureScript

Google

? animufag ?
27.08.2017
10:03:16
если все отменяемые действия описать в виде данных, то анду/реду изи же делается. просто список из действий и указатель на текущее действие. при том что в редаксе и так уже есть экшоны их просто нужно отфильтровать и поместить в стейт. как бы это базовое применение редакса
это в принципе лучше ложится на фп, чем императивное

Nikita
27.08.2017
10:03:38

Pavel
27.08.2017
10:03:59

Nikita
27.08.2017
10:04:17

Evgeny
27.08.2017
10:09:55
Всем доброго дня
https://stackoverflow.com/questions/44061155/react-native-npm-link-local-dependency-unable-to-resolve-module
кто-нибудь знает как заюзать npm link в рамках https://github.com/react-community/create-react-native-app ?
вот схожее ишью, но без ответа

Vadim
27.08.2017
11:28:17
Кто работал с геолокацией? getCurrentPosition возвращает неверные координаты (longitude: -122.08400000000002)

Алексей
27.08.2017
12:13:57


? animufag ?
27.08.2017
12:16:39
здорово, но в апделегате я и пытался найти что-нибудь похожее
ну и далее в сорцах экспо/рн
ну то есть мб ответ на поверхности но я не вижу

Nikita
27.08.2017
12:17:52

Pavel
27.08.2017
12:18:01

Алексей
27.08.2017
12:18:17
ты же вбросил что он не функционален
а теперь говоришь мне доказывать обратное

Pavel
27.08.2017
12:19:35

Алексей
27.08.2017
12:19:37
ну то есть мб ответ на поверхности но я не вижу
ну вот смотри мой AppDelegate, на этих строках и прописывается путь до бандла, думаю отсюда и надо начинать копать https://github.com/savelichalex/personal-bookkeeping/blob/master/ios/PersonalBookkeeping/AppDelegate.m#L36

? animufag ?
27.08.2017
12:19:47

Google

Алексей
27.08.2017
12:19:57
а не где он функционален

Pavel
27.08.2017
12:20:03

Алексей
27.08.2017
12:20:26

? animufag ?
27.08.2017
12:20:41
ну то есть он ещё не иммутабельный но ближе к фп чем что бы там ни было раньше
ну или иммутабельный, но подозреваю там всё же есть хаки для производительности (речь о предоставляемом пользователю апи, а не о том как внутри устроено)

Pavel
27.08.2017
12:22:59

? animufag ?
27.08.2017
12:23:14
при чём тут фп?

Алексей
27.08.2017
12:23:36

Pavel
27.08.2017
12:25:35

? animufag ?
27.08.2017
12:25:50
классы по сути предоставляют полиморфизм по первому аргументу функции, что не противоречит фп. Хотя в современных фп-языках от этого отказываются в пользу тапйклассов/трейтов предоставляющих полиморфизм по всем аргументам/возвращаемым значениям
насколько понимаю в окамле есть те же классы/объекты

Play
27.08.2017
12:26:39

Алексей
27.08.2017
12:26:46

? animufag ?
27.08.2017
12:28:47
ну то есть у тебя есть
class A {
method foo(x) {}
}
class A extends B {
override method foo(x) {}
}
и получается у тебя есть полиморфная функция foo с аргументом x и неявным аргументов this по которому она и выбирает конкретную реализацию

Play
27.08.2017
12:32:05

Алексей
27.08.2017
12:35:51
ясно, я понял что @pavelsilinw не хочет отвечать за свой вброс о 100% императивном реакте, а @vlastachu не в ту степь немного пошел) позвольте я поставлю точку тогда в этом не очень уместном по тематике чата споре. ФП можно понимать довольно широко, лично в моем понимании ФП это о композиции функций, именно поэтому в ФП превалируют чистые функции, которые легко композировать, собирать программу как из лего. Реакт очень хорошо под это определение подходит, так как результат рендера зависит от пропсов и он предсказуем. Компонентная система позволяет эти самые компоненты композировать и так же собирать view часть из них, как чистые функции в ФП. Но так же в React-е конечно есть императивные части (setState, refs, setNativeProps и т.д.) что тоже хорошо, так как не ограничивает тебя в рамках какой то парадигмы и позволяет просто решать задачи.


? animufag ?
27.08.2017
12:38:03
ну это просто банальная идея на поверхности что ооп не противоречит фп, но текущий ооп сильно навязывает императивщину тк каждый класс хранит в себе скрытый стейт и там где-то у себя его мутирует, что усложняет в перспективе тестирование программы

Алексей
27.08.2017
12:39:08

Google

? animufag ?
27.08.2017
12:40:56
ну инкапсуляция неймспейса ок, инкапсуляция стейта не ок (возможно неправильно употребля термины, проще говоря прайват/протектед не нужны)

Vladimir
27.08.2017
12:40:59
В реакте вполне мог быть rx и полная функциональщина. Без нее обошлись и это очень здорово
Потому что есть вещи, которые трудно описать функционально, без императивного кода

? animufag ?
27.08.2017
12:41:46
ну рх тоже такой двоякий

Stas
27.08.2017
12:45:35
reducer в редаксе, pure и functional components в реакте вполне себе функциональщина.

Nikita
27.08.2017
12:47:00
а так же HOC

Andrey
27.08.2017
12:50:27
onResume

Алексей
27.08.2017
12:51:35
render и не должен срабатывать кмк. надо смотреть lifecycle андроида

Stas
27.08.2017
12:52:41
Зависит от того что случилось с приложением.

? animufag ?
27.08.2017
12:52:47

Алексей
27.08.2017
12:53:25
в смысле раздача бандлов по вайфаю?
ты и на голом RN так можешь, может я чего то не понимаю?

? animufag ?
27.08.2017
12:54:08
я тут совсем новичок так что воспринимай мои слова с критикой

Алексей
27.08.2017
12:54:45

Andrey
27.08.2017
12:54:52
как-то интересно было что получу с Expo и разобрал сбилденное приложение и решил от него отказаться

Алексей
27.08.2017
12:56:40
ну здорово в таком случае)
мне кажется что я начинаю понимать. ты про то что можно поставить проложение от экспо и в него просто бандл передавать?
чтобы не билдить нативную часть постоянно, так?

? animufag ?
27.08.2017
12:57:23
тип crna, потом npm start и он тебе пишет qr и с устройства читаешь этот qr
сам я такого не проделывал и всё отлаживал на симуляторе, но я так понимаю он запускает локальный сервер и раздача с вайфая (мб конечно он просто загружает это на свой expo.io)