
? ethorz
20.01.2017
06:31:30
редакс?

Danil
20.01.2017
06:31:41
Может кто-нибудь знает где подробнее почитать про это
Дак тут простая работа с ui

? ethorz
20.01.2017
06:32:03
аа

Google

Danil
20.01.2017
06:32:24
При клике на один компонент, должен поменяться другой

Kir
20.01.2017
06:32:42
Ну прокидовай пропсы, отлавливай изменения
Тебе при изменении в родительском нужно перерендерить дочерний ?

Danil
20.01.2017
06:33:50
У меня есть 2 компонента, они находятся в третьем

Kir
20.01.2017
06:33:57
нуууу

Danil
20.01.2017
06:34:06
Они не являются предками/потомками друг другу

Kir
20.01.2017
06:34:35
Parent {
child - 1
child - 2
}

Danil
20.01.2017
06:34:56
Один является инпут, второй одной из кнопок, при клике на кнопку нужно изменить инпут

Vitaly
20.01.2017
06:35:08
При клике на один компонент, должен поменяться другой
Простой способ - передать из родителя функцию которая при вызове поменяет стейт в нем, если не хочешь ее каждый раз пробрасывать в глубь, то юзай контекст.
Ну и ваще адовый способ - хранить рефы детей и вызывать у них методы напрямую, но это скользкая дорожка)

Danil
20.01.2017
06:35:38
Ну сейчас так попробую

Dreamerinnoise
20.01.2017
06:36:23

Kir
20.01.2017
06:36:47
при клике на кнопку ты через функцию передаешь параметры на верх, в родительском компоненте ты эти параметры принимаешь обрабатываешь и передаешь пропсами в другой дочений компонент

Danil
20.01.2017
06:37:24
Ну сейчас попробую все это сделать

Google

Maxim robox
20.01.2017
06:37:40

Dreamerinnoise
20.01.2017
06:38:06

Aleksey
20.01.2017
06:39:14
ref ваще антипаттерн. если только напрямую с элементом DOM'a не работаем. на ненативные элементы его вешать точно неправильно
child -> parent реализуется через общий стейт. собственно, редакс и любые стейт хранилища для этого и делались

? ethorz
20.01.2017
06:42:10
значит пусть структуру делает другую

Aleksey
20.01.2017
06:43:07
ну, редакс заводить если проект еще не дозрел смысла нет. можно просто сделать общий контейнер и через него раздавать стейт и функции для его изменения в чайлдов

Vitaly
20.01.2017
06:43:13
а скиньте пожалуйста ссылку на то что "ref - это антипатерн", мне не понятно чем плохо получать компонент по ссылке

Maxim robox
20.01.2017
06:43:35

a
20.01.2017
06:46:33
ref ваще антипаттерн. если только напрямую с элементом DOM'a не работаем. на ненативные элементы его вешать точно неправильно

Aleksey
20.01.2017
06:47:12
если приходится использовать ref на кастомных элементах это говорит о том что архитектура кривая. view = render(state); с рефами ты просто пытаешься закостылить какое-то поведение

a
20.01.2017
06:47:47
мы не работаем с DOM, как с объектом
это всего лишь декларация

Aleksey
20.01.2017
06:48:48
кто с бэкбона переходит страдает таким подходом. там это норма

a
20.01.2017
06:49:10
да сколько уже можно )
сколько это еще протянется?
еще пару лет выдалбливать?

Google

Gordey
20.01.2017
06:50:13
дофига это еще протянется, куча крупных контор сидят с горами легаси на проектах
я уж не говорю про более мелкие

Vitaly
20.01.2017
06:52:55
ref не про DOM, findDOMNode про дом, а реф про ссылку на инстанс компонента. Возьмем к примеру draft.js У компоненты Editor куча статик методов для управления стейтами и всякие focus/blur/etc...

a
20.01.2017
06:54:35
у тебя нет "инстансов компонента"
это не ооп
это так сложно, серьезно?
у тебя этот "инстанс" живет 1/60 секунды, если у тебя такой фреймрейт, допустим
или дольше, если ты добавишь оптимизаций на willComponentUpdate
это misconception
нельзя в реакте думать "инстансами"

Aleksey
20.01.2017
06:59:10
если тебе надо залезть во внутренности чужой либы и нет другого способа как через ref - это можно понять. просто кривое API либы.
но это, определенно, костыль.
я бы подумал на PR на нужную фичу. вдруг не ты один таким страдаешь.

a
20.01.2017
07:01:19
If you aren't an experienced React developer, don't use context. There is usually a better way to implement functionality just using props and state.
If you insist on using context despite these warnings, try to isolate your use of context to a small area and avoid using the context API directly when possible so that it's easier to upgrade when the API changes.


Aleksey
20.01.2017
07:03:31
с контекстом можно натерпеться. особенно тем кто с редаксом работает. по умолчанию { pure: true } в коннекте. и изменения контекста без изменений пропсов и стора не приводят к перерендеру. так-то )
так что повнимательнее. крайне занятные грабли иногда вылазят если контекст может меняться и ты на это заложился

Danil
20.01.2017
07:07:24
Не могу в родительском компоненте получить пропсы дочернего

Aleksey
20.01.2017
07:08:14
? это как ваще. родительский их в дочерний и передает

Danil
20.01.2017
07:08:32
Ну вот я их передал

Google

a
20.01.2017
07:08:36
https://twitter.com/HeemFrederic/status/817762195203309568

Danil
20.01.2017
07:08:37
А как их получать
Чтоб в методе использовать

a
20.01.2017
07:09:40

Dreamerinnoise
20.01.2017
07:09:48
https://facebook.github.io/react/docs/refs-and-the-dom.html
Кто там просил ссылку на рефы

Danil
20.01.2017
07:10:19
Метод дочернего элемента находится в родительском и в этом методе мне нужно получить пропсы

a
20.01.2017
07:10:37
https://facebook.github.io/react/docs/refs-and-the-dom.html#dont-overuse-refs

Aleksey
20.01.2017
07:11:18

Admin
ERROR: S client not available

Aleksey
20.01.2017
07:11:38
у тебя явно в архитектуре про*бы

a
20.01.2017
07:11:49

Aleksey
20.01.2017
07:12:16
если это общий метод - выноси его как static и обращайся
а еще лучше сразу в родительском считай через него что надо и отдавай в чайлда
чайлд если не имеет своего стейта полностью зависит от пропсов родителя. ну и очень частный случай от реального DOM'a. так что все что можно посчитать в чайлде можно посчитать и в родителе, обычно

Danil
20.01.2017
07:15:05
В чайлде стэйтов нет

a
20.01.2017
07:15:38
если родительскому компоненту вдруг понадобились пропсы дочернего, который получает их из store - тогда проблема в другом месте


Maxim robox
20.01.2017
07:21:14
А подскажите, как можно элегантно разрулить вот такой кейс:
Есть реакт компонент https://github.com/seibelj/react-simple-markdown-editor
Представляет собой набор кнопочек B I S H1 H2 H3 для «маркдаунизации» какой-нибудь textarea.
Но с textarea он работает напрямую через DOM, минуя реакт. Требует указать element.id от textarea.
Ну это ещё терпимо.
Но у него прикол в том, что после клика на кнопочку, значение textarea в DOMе меняется, но событие textarea onChange не триггерится. Соответственно, если нажать на какую-нибудь кнопку, то в state ничего не запишется, пока ты сам ты вызовешь onChange (например, дописав что-нибудь ещё в textarea).
Благо, что клик по кнопке переводит фокус на textarea. Поэтому я решил проблему тем, что помимо onChange повесил ещё onBlur. Работает, но чувствуется костыльность. Можно ли было поступить как-то иначе?

Aleksey
20.01.2017
07:22:38
найти нормальный editor? под маркдаун не пробовал, но, вообще такие есть

Andrew
20.01.2017
07:22:45

Google

Maxim robox
20.01.2017
07:23:14

Aleksey
20.01.2017
07:23:48
форкни и имплементируй. потом PR сделаешь. чсв почешешь, людям поможешь )

Danil
20.01.2017
07:24:23
Вот в общем Li дочерний получается, в метод change flag нужно получить пропсы Li countryFlag и countrName

Maxim robox
20.01.2017
07:25:30

Dreamerinnoise
20.01.2017
07:25:35

a
20.01.2017
07:27:22
написать MD-редактор - это не просто, а супер-просто. Либ, которые умеют маркдаун (и для реакта тоже) - тьма
https://github.com/acdlite/react-remarkable
как вариант

Maxim robox
20.01.2017
07:28:07

Aleksey
20.01.2017
07:28:23
жуть-то какая )
не лень копипастить было? сделай массив и перебирай через .map
в changeFlag сделай
changeFlag(flag, country) {
return {
}
}
хэндлеры объявляй через onClick={this.changeFlag(flag, country)}

Maxim robox
20.01.2017
07:28:24

a
20.01.2017
07:29:35
тебе что именно надо?

Aleksey
20.01.2017
07:30:05

Maxim robox
20.01.2017
07:30:29

a
20.01.2017
07:30:30
редакторов MD настолько дофига и они все такие разные
что ты хочешь видеть? Тебе нужен превью?

Maxim robox
20.01.2017
07:31:18

Aleksey
20.01.2017
07:31:21
поправочка
changeFlag(flag, country) {
return {
}
}
читать как
changeFlag(flag, country) {
return () => {
}
}

Alex
20.01.2017
07:31:51
всем привет, кто может помочь с reselect?