@react_js

Страница 5001 из 5115
Alex
13.10.2018
22:23:54
зря я не отправил сообщение, моя либа разрабатывалась с расчётом, что любые мутации стора будут инкапсулированы в логику (функции) и стоять за каким-то EE связывающим логику и вью

т.е. нет, не разрешаю

а такое store.set(todos([1, 2, 3]).completed, true) эта строчка установит значение completed у элементов массива(или Map) todos с айди 1, 2 и 3

Andrey
13.10.2018
22:25:30
Магия(

Google
Alex
13.10.2018
22:25:48
)))

только ошибся store.set(todos([1, 2, 3], e => e.completed), true)

Andrey
13.10.2018
22:27:14
Ну, уже понятнее, но всё равно жесть.

ОК, не жесть. Непривычно.

только ошибся store.set(todos([1, 2, 3], e => e.completed), true)
Слушай, а зачем в сторе позволять столь глубокие структуры данных иметь?

Alex
13.10.2018
22:30:05
да, скорее не привычно, теперь представь, что есть какая-то эвент шина, в ней событие markCompleted в пейлоаде number или number[], на событие подписана функция: function markCompleted(payload) { store.set(todos(payload, e => e.completed), true); } теперь можно выделить несколько элементов и нажать кнопку completed

Слушай, а зачем в сторе позволять столь глубокие структуры данных иметь?
не понял, а массив может быть только из number, string, и что там ещё?

структура стора следующая: { todos: [ { completed } ] }

Andrey
13.10.2018
22:31:28
не понял, а массив может быть только из number, string, и что там ещё?
Нет, просто твой синтакси спросто провоцирует делать структуры с огромной вложенностью. Работать то удобно.

Alex
13.10.2018
22:31:45
если удобно, почему нет?

Cenator
13.10.2018
22:31:56
если удобно, почему нет?
полностью оправдан

Alex
13.10.2018
22:32:44
типа взял откуда-то ссылку на поддрево из стора и работаешь с поддревом даже не зная, что оно вложено куда-то

Google
Andrey
13.10.2018
22:32:46
Cbynfrcbc dpzn bp ujkjds/

если удобно, почему нет?
Мне кажется, что в итоге люди всё же вернутся к куче маленьких сторов, где синтаксис oldStore => newStore предпочтительнее, имхо.

Alex
13.10.2018
22:33:59
Ну, хз. Я бы предпочёл явно записать что-то типа todos.filter().map()
можно и так, почему нет: store.set(todos, todos => todos.filter().map())

ну суть в том, что можно изолированно работать с частями состояния не зная о внешнем мире, т.е. создавать фичи

Andrey
13.10.2018
22:36:18
Ну, ок. Моя позиция заключается в том, что сторы должны быть маленькими и нельзя пользователю позволять больше, поэтому oldStore => newStore не то что оправдано - оно необходимо.

Alex
13.10.2018
22:38:16
эффекторнулись

Andrey
13.10.2018
22:38:31
эффекторнулись
Ну, я нокаутнулся)

Alex
13.10.2018
22:39:04
сопротивляться бесполезно, победитель очевиден

я сдаюсь

Andrey
13.10.2018
22:39:29
А во вложенности собирать computed сторами
А что такое вложенность в твоём понимании?

Andrey
13.10.2018
22:39:52
сопротивляться бесполезно, победитель очевиден
Нет. У твоего решения есть огромное преимущество перед эффектором -это локальность.

А в остальном да, всё печально)

Kelin
13.10.2018
22:40:22
Ну собрать todos из соответствующих text, complete итд

Alex
13.10.2018
22:40:35
локальность, это типа, что оно подходит только мне?

Andrey
13.10.2018
22:40:36
локальность, это типа, что оно подходит только мне?
Нет. Не только тебе. Я сравнил с эффетором.

Alex
13.10.2018
22:43:10
Ну собрать todos из соответствующих text, complete итд
ты не понял, берёшь строку const store0 = createStore() копируешь ровно столько раз, сколько у тебя глобальных переменных(в том числе в виде объектов) в приложении, потом, переименовываешь store0 в соотвествии с назначением и распихиваешь эти сторы там, где они нужны

Google
Alex
13.10.2018
22:44:07
ну ещё можно как акторы их представлять со своим набором событий и редьюсерами

Alex
13.10.2018
22:46:49
да мы поняли

Timofey
13.10.2018
22:48:18


Andrey
13.10.2018
22:48:55
Не будет.

Timofey
13.10.2018
22:51:23
ну вот я покинул компонент и он размонтировался, а к тому времени then отработал и this.setState срабатывает. реакт же кидает ошибку в таком случае

Timofey
13.10.2018
22:52:26
и его можно не парясь игнорить?

Andrey
13.10.2018
22:53:24
Лучше не игнорить, а прерывать запросы.

Kelin
13.10.2018
22:54:16




Kelin
13.10.2018
22:55:20


Волчик
13.10.2018
22:58:51
Кто-нибудь использовал Redux-ORM?

Сильно тормозит?

Cenator
13.10.2018
23:04:42
@MyNameIsLiberty вроде эксперт в ней

Kelin
13.10.2018
23:06:59
Подытожу косяки драфта Если делать кастомные атомарные блоки - Результат тяжело превратить в строку по той причине, что “текст” блока должен состоять из одного символа, иначе придется X раз жать delete, чтобы его удалить. Пропсы блока получаются через костыли - Если нажать delete перед атомарным блоком, он почему-то становится обычной строкой. (Ишью об этом висит 2 года) - Невозможно получить selectionState внутри компонента блока. Это означает, что невозможно нормальным образом определить, выделен ли он вообще или нет Если делать декораторы - Нет возможности сделать декорированный блок “immutable” (типа удалять блок целиком при нажатии delete). Это, в общем-то, логично, но в виду такой захардкоженности блоков и тяжести работы с ними, было бы клево добавить такую возможность Фразой “Low-level API” разработчики пытаются оправдать архитектурные костыли, которые нагородили и не могут теперь исправить В либе куча всяких Modifier, AtomicBlocksUtils, RichUtils, KeyBingingUtils, но когда начинаешь что-то делать, понимаешь, что даже этого недостаточно

А, еще забыл Отсутствует API для плагинов. Есть draft-js-plugins, кастомный компонент редактора, который принимает проп plugins. Но это, сами понимаете, жопа. При этом сорсы плагинов километровые, абсолютно нечитаемые, абсолютно непонятные

Alex
13.10.2018
23:13:33
ну да, там пиздец, это ещё на разных браузерах по разному всё работает

Kelin
13.10.2018
23:15:00
Из косяков slate - не дописана (или не раскрыта) дока по сущностям, коих в библиотеки почти 20. НО это на все 100% компенсируется тем, что главная страница состоит из аж 23 примеров использования. Из этого следует, что практически любую фичу можно просто скопировать из сорсов примеров и воткнуть (что я, собственно, и сделал). Сорсы при этом понятные и читаемые, очень понравилась фишка с изменением стейта через чейнинг change Плагины из коробки, onChange, renderNode и остальные хуки работают как мидлвари - передается next Любое действие можно сделать встроенными методами - перенос курсора, замена текста на определенном куске, вставка блока, удаление, разбиение - вообще все. При этом можно создать command - шорткат, в который прокидывается change, там можно описать цепочку действий и так же юзать в цепочках

Google
Kelin
13.10.2018
23:16:23
Очень понравилось наличие всевозможных moveAnchorToEndOfBlock, moveOffsetTo, moveToStartOfText итд



Сергей
13.10.2018
23:21:12
Ищу не могу найти (

Kelin
13.10.2018
23:22:15


Сергей
13.10.2018
23:23:16
Это для чего

Slate?

Kelin
13.10.2018
23:26:36
Это для чего
Я делаю редактор команд У команд есть переменные - { codename, name } - Их нужно визуально выделять. Конвертить строку Hello, %foo% в Hello, Foo (где foo - codename, Foo - name) - Если нет переменных - отображать как строку - Удалять только целиком - Менять фон при выделении - Автоматически заменять на переменную, если написать Hello, %foo - Возможность втыкать переменные нажатием на кнопки на место курсора

Slate?
Да, это slate

Admin
ERROR: S client not available

Kelin
13.10.2018
23:30:27


Сергей
13.10.2018
23:58:24
Хипер даже

Kelin
13.10.2018
23:59:09
ага

Игорь
14.10.2018
00:21:30
Сильно тормозит?
У меня без тормозов все летает.

Kelin
14.10.2018
00:22:37
Подскажешь по слейту если что?
Только учти, что я сам только сегодня начал))

Сергей
14.10.2018
00:23:44
а что там с визуальной кастомизацией?

Google
Kelin
14.10.2018
00:26:41
Ну, блоки = компоненты. Кастомизируй, как хочешь)

https://www.slatejs.org Тут тонна примеров, в общем-то

Тут и маркдауны всякие, и эмодзи, и видосы, и всплывающие менюшки, куча всего крч

Пг
14.10.2018
00:44:59
styled components позволяет сделать что-то вроде: props => props.header ? `@media (min-width: 600px) { display: none; }` ?

Пг
14.10.2018
00:45:57
Что-то не работает, только если display: ${props => props.header ? 'none': 'block'};

Пг
14.10.2018
00:46:41
export const Logo = styled(Typography)` max-width: 120px; padding-right: ${theme.spacing.unit * 2}px; ${(props: any) => props.header ? ` ${theme.breakpoints.down('xs')} { display: none !important; }` : '' } `;

если убрать функцию, то все ок

Сергей
14.10.2018
00:52:54
попробуй тогда функцию внутрь media засунуть

странно

Cenator
14.10.2018
00:54:02
export const Logo = styled(Typography)` max-width: 120px; padding-right: ${theme.spacing.unit * 2}px; ${(props: any) => props.header ? ` ${theme.breakpoints.down('xs')} { display: none !important; }` : '' } `;
export const Logo = styled(Typography)` max-width: 120px; padding-right: ${theme.spacing.unit * 2}px; ${(props: any) => props.header ? css` ${theme.breakpoints.down('xs')} { display: none !important; }` : '' } `;

попробуй так

(добавил css)

Пг
14.10.2018
00:55:05
Кстати, еще вопрос, по поводу nextjs. при запуске next и рекомпиле при каких-то изменениях + обновление страницы (с хот релоад все ок) Warning: Prop d did not match. Server: "M 0 0 h 24 v 24 H 0 V 0 Z" Client: "M0 0h24v24H0V0z" И такие же ошибки с классами MUI Как с этим бороться?

а css откуда берется?

Cenator
14.10.2018
00:55:30
импортируешь из стайледов

Пг
14.10.2018
00:55:44
ок, спс

Alexander
14.10.2018
03:45:22
Есть какие примеры по структуре приложения react+mobx? Как это правильно делать

Eduard
14.10.2018
03:56:56
Что лучше всего испльзовать чтобы изменять состояние хранилища?

Cenator
14.10.2018
04:15:17
экшены

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