@react_js

Страница 5077 из 5115
gnoblin
24.10.2018
23:01:00
Реально. Только имеет смысл в этот метод название переменной передавать строкой и смотреть на window[var], а то примитив просто скопируется по значению и никаких ссылок
const waitFor = (flagName) => { new Promise(resolve => { const interval = setInterval(() => { if (window[flagName] === true) { resolve(); clearInterval(interval); } }, 200); }); } что-то такое и await waitFor("var") ?

Andrew
24.10.2018
23:02:37
https://medium.com/@dmnsgn/singleton-pattern-in-es6-d2d021d150ae

Google
AluV
24.10.2018
23:03:02
Я вот эту штуку нашел может попробую https://github.com/Caesor/react-singleton

Andrew
24.10.2018
23:03:37
бля

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

AluV
24.10.2018
23:06:37
да думаю обычный класс можно запилить

gnoblin
24.10.2018
23:08:08
Kelin
25.10.2018
00:33:29


https://github.com/styled-components/styled-components/issues/2146

Artyom
25.10.2018
00:36:39
Это больше выглядит как баг .memo....

Kelin
25.10.2018
00:38:16
Ага

Kevin
25.10.2018
00:39:29
если с recompose/pure работает нормально, то это будет и правда memo

Artyom
25.10.2018
00:41:05
Ну и костыли...

Чет реакт все меньше радует последнее время

Google
Kevin
25.10.2018
00:42:36
а вроде писали, что будет проверка, чтобы был именно модуль, а не объект с ключом default просто используйте export default :)

Artyom
25.10.2018
00:42:40
Вот почему нельзя было сделать suspense( <div>Loading...</div>, <Component /> )

Andrey
25.10.2018
00:42:53
react/memo.js at master · facebook/react · GitHub https://github.com/facebook/react/blob/master/packages/react/src/memo.js

Kelin
25.10.2018
00:43:06
Вот почему нельзя было сделать suspense( <div>Loading...</div>, <Component /> )
Ты можешь написать хелпер и сделать как тебе удобно, держу в курсе

Andrey
25.10.2018
00:43:15
Мемо - это не декоратор.

Это отдельный тип компонента.

Artyom
25.10.2018
00:43:57
Ты можешь написать хелпер и сделать как тебе удобно, держу в курсе
"классика" реакта, зачем делать нормально, если можно написать хелпер. Нуу, только с react-dom чет не прокатит

Kelin
25.10.2018
00:44:11
Тут у меня сразу вопрос насчет работы мемоизации в компонентах В класс-компонентах коллбеки можно положить в метод, чтобы они не пересоздавались в рендере. Что делать с SFC, в котором коллбеки никуда не положить? У меня есть редактор из X айтемов, и при редактировании одного айтема происходит ререндер всех айтемов тупо из-за того, что коллбеки заново создаются и это типа другой проп.

"классика" реакта, зачем делать нормально, если можно написать хелпер. Нуу, только с react-dom чет не прокатит
Бля, ну а кто-то подумает "че за говеная функция, лучше бы компонентом сделали". Это субъектив пошел

Kelin
25.10.2018
00:46:09
Делай pureComponent
Я уже так сделал. Но я не хочу переводить все компоненты в классы из-за этого Я бы вынес это в эффектор и был бы #антибугурт, но с несколькими инстансами работать нормального способа пока нет

Andrey
25.10.2018
00:46:31
УДОБНО
Да. Мемо отвечает спеке. Если ты опираешься не на спеку, а реализацию, то ты мудак.

Kelin
25.10.2018
00:47:01
ты уже чет на другой вопрос отвечаешь...
В смысле на другой. Я про саспенс отвечаю, не про мемо

Kelin
25.10.2018
00:49:06
Но насчет мемо, хочу внести 5 копеек и сказать, что если бы SFC изначально транспилился в какой-нибудь объект, добавить в него мемо было бы проще без плясок в заворачивание ?

Google
Kelin
25.10.2018
00:49:23
Но тогда теряется смысл SFC, типа "это просто функция"

Andrey
25.10.2018
00:49:36
Какая спека?
Спека того что такое компонент и как он должен работать. Я хз как sc биндятся к компонентам. Если они считают, что компонентом не может быть объект, то это нарушение спеки.

Тебе нигде не сказано, что объект не может восприниматься как компонент.

Artyom
25.10.2018
00:50:13
@kelin2025

Ответственность JSX - отвечать за отображение DOM блоков. А не разруливать роутинг и мемоизацию - это же бред

Либо нам нужен еще один какой-то синтаксис \ теги или пометки для JSX для инкапсулирования логики, если хочется что-то описать декларативно

Но это не должен быть абсолютно тот же JSX !

Это же ясно как день. На Бали. В июле. ...

Почему нет <If>...<Else>...?? И т.п.? Потому что должна соблюдаться семантика - синтаксическая инкапсуляция абстракций

Kelin
25.10.2018
00:51:05
Не вижу противоречий моего утверждения и твоего

Artyom
25.10.2018
00:51:51
Не вижу противоречий моего утверждения и твоего
Я к тому что это не вкусовщина. Жир крнкпеиный факт - логика в JSX - размазывание

Artyom
25.10.2018
00:52:01
Andrey
25.10.2018
00:52:19
Сам придумал - сам обиделся.

Kevin
25.10.2018
00:52:30
+

Как с экспортами

Andrey
25.10.2018
00:53:30
Ткни где указано что компонент может быть объектом, первый раз слышу
А где сказано, что он не может им быть? По спеке вообще не сказано чем компонент не должен являться.

Kelin
25.10.2018
00:54:40
Я всего лишь предположил возможность легко добавлять фичи в компоненты. Использовать объект вместо функции. Не было бы никаких проблем - добавить проп memo и пускай реакт его чекает и думает, ререндерить ему или нет. Причем тут блять JSX, ему вообще в данном случае пофиг, что там за мемо

Kevin
25.10.2018
00:54:51
А что возвращал React.createClass?

Google
Kelin
25.10.2018
00:56:05
А что возвращал React.createClass?
ох если бы я юзал реакт до es6

Andrey
25.10.2018
00:57:03
О какой спеке речь?
В данном случае о документации реакта. В ней не сказано что такое компонент на низком уровне. Но почему то все подумали, что это только функции. Вот sc на это и напоролись. Здравствуйте.

Уверен что проблема решается тупо вырезанием варнинга в sc.

Admin
ERROR: S client not available

Artyom
25.10.2018
00:57:47


Andrey
25.10.2018
00:57:59
И что?

Сейчас это так. В следующей версии расширят определение.

Что сейчас и произошло, кстати.

Kelin
25.10.2018
00:59:17


Andrey
25.10.2018
01:00:20
Теперь у нас компонент - это объект особого вида.

См. Memo

Kelin
25.10.2018
01:00:47
Вот по-нормальному надо было его объектом сразу и сделать

Kevin
25.10.2018
01:01:07
А разве так изначально и не было?

Kelin
25.10.2018
01:01:08
Объектом особого вида и расширять при необходимости

Max
25.10.2018
01:02:08
Потому что мобх усаживает тебя на пенек с хуями под названием "магия" и обливает говном декораторов, со словами "теперь это твой дом, ублюдок"
Опять вброс про mobx) Извини но я не могу не ответить) Мне кажется заявлять что mobx такой плохой потому что в нем куча "магии" сродни тому как не зная что такое промисы и имея только знакомство с коллбеками заявлять что async/await является магией. В этой "магии" есть минус только в том что она немного повышает порог вхождения (как и async/await которые требуют знания промисов) но зато после того как разобрался с mobx все становится прозрачным и ничем не хуже редакса в плане предсказуемости 1) Mobx не заставляет "обливаться говном декораторов". Декоратор это просто синтаксический сахар который экономит две строчки кода. Хочешь не используй декораторы и вместо одной строчки class SomeStore { @observable user = ""; ... } пиши 3 строчки class SomeStore { _user = observable(""); get(){ return this._user.get() } set(val){ this._user.set(val) } ... } 2) А если уже геттеры и сеттеры жс каждутся магией то mobx не заставляет их использовать - это всего лишь синтаксический сахар обращения к полям, хочешь не используй но вместо простой записи <div> task's folder name: {this.props.task.project.folder.name} </div> придется на каждое обращение к полям добавлять .get() вызовы <div> task's folder name: {this.props.task.get().project.get().folder.get().name.get()} </div> 3) Если работа самого mobx кажется "магией" то на хабре есть несколько постов (https://habr.com/users/bgnx/posts) с подробным объяснением как он работает. А основной механизм работы mobx можно даже в объяснить в одном предложении: При оборачивании компонента observer-хокком mobx врапит рендер-функцию компонента и при вызове присваивает в глобальную переменную (а при выходе из функции возращает предыдуще значение) ссылку на инстанс этого компонента чтобы при обращении к observable-сторам (которые создаются через observable(val)) через .get()-вызов происходило добавление компонента из глобальной переменный в массив подписок этого observable-стора и потом при изменении значения стора через .set("") происходил вызов рендера всех компонентов из массива подписок Правда надо заметить что в mobx в массив подписок добавляется не сам компонент а объект реакции который уже будет вызывать сайд-эффект обновления компонента, а computed это некий подпид реакции который вместо сайд-эффекта перевычисляет функцию (добавляя таким образом мемоизацию) и решает глитчи (лишние вычисления). Но даже все это можно написать в 85 строчках кода (https://habr.com/post/349022)

Andrey
25.10.2018
01:03:16
Объектом особого вида и расширять при необходимости
Смысла нет особого. Но, кстати, ещё с 16.3 в реакте компонент - это и объект тоже.

react/isValidElementType.js at master · facebook/react · GitHub https://github.com/facebook/react/blob/master/packages/shared/isValidElementType.js

Sc с фораардрефом корректно работают?)

Kelin
25.10.2018
01:05:15
Опять вброс про mobx) Извини но я не могу не ответить) Мне кажется заявлять что mobx такой плохой потому что в нем куча "магии" сродни тому как не зная что такое промисы и имея только знакомство с коллбеками заявлять что async/await является магией. В этой "магии" есть минус только в том что она немного повышает порог вхождения (как и async/await которые требуют знания промисов) но зато после того как разобрался с mobx все становится прозрачным и ничем не хуже редакса в плане предсказуемости 1) Mobx не заставляет "обливаться говном декораторов". Декоратор это просто синтаксический сахар который экономит две строчки кода. Хочешь не используй декораторы и вместо одной строчки class SomeStore { @observable user = ""; ... } пиши 3 строчки class SomeStore { _user = observable(""); get(){ return this._user.get() } set(val){ this._user.set(val) } ... } 2) А если уже геттеры и сеттеры жс каждутся магией то mobx не заставляет их использовать - это всего лишь синтаксический сахар обращения к полям, хочешь не используй но вместо простой записи <div> task's folder name: {this.props.task.project.folder.name} </div> придется на каждое обращение к полям добавлять .get() вызовы <div> task's folder name: {this.props.task.get().project.get().folder.get().name.get()} </div> 3) Если работа самого mobx кажется "магией" то на хабре есть несколько постов (https://habr.com/users/bgnx/posts) с подробным объяснением как он работает. А основной механизм работы mobx можно даже в объяснить в одном предложении: При оборачивании компонента observer-хокком mobx врапит рендер-функцию компонента и при вызове присваивает в глобальную переменную (а при выходе из функции возращает предыдуще значение) ссылку на инстанс этого компонента чтобы при обращении к observable-сторам (которые создаются через observable(val)) через .get()-вызов происходило добавление компонента из глобальной переменный в массив подписок этого observable-стора и потом при изменении значения стора через .set("") происходил вызов рендера всех компонентов из массива подписок Правда надо заметить что в mobx в массив подписок добавляется не сам компонент а объект реакции который уже будет вызывать сайд-эффект обновления компонента, а computed это некий подпид реакции который вместо сайд-эффекта перевычисляет функцию (добавляя таким образом мемоизацию) и решает глитчи (лишние вычисления). Но даже все это можно написать в 85 строчках кода (https://habr.com/post/349022)
Опять утверждения, что магия это заебись. Даже влом что-либо отвечать, попиши на Vue тогда, если нравится

Google
Andrey
25.10.2018
01:06:29
Да
Тогда проблемы у sc, а не реакта, так как memo сделан абсолютно так же как и forwardRef

Kelin
25.10.2018
01:07:14
Кстати, там и компоненты как объекты вроде :)
Само объявление компонента объектом - это хуево

Но то, что какой-нить React.memo возвращает объект - на кодовой базе проекта никак не сказывается, все подсказки и прочее работает заебись

Сделали бы тогда изначально React.sfc(() => ...)

Andrey
25.10.2018
01:09:23
Опять вброс про mobx) Извини но я не могу не ответить) Мне кажется заявлять что mobx такой плохой потому что в нем куча "магии" сродни тому как не зная что такое промисы и имея только знакомство с коллбеками заявлять что async/await является магией. В этой "магии" есть минус только в том что она немного повышает порог вхождения (как и async/await которые требуют знания промисов) но зато после того как разобрался с mobx все становится прозрачным и ничем не хуже редакса в плане предсказуемости 1) Mobx не заставляет "обливаться говном декораторов". Декоратор это просто синтаксический сахар который экономит две строчки кода. Хочешь не используй декораторы и вместо одной строчки class SomeStore { @observable user = ""; ... } пиши 3 строчки class SomeStore { _user = observable(""); get(){ return this._user.get() } set(val){ this._user.set(val) } ... } 2) А если уже геттеры и сеттеры жс каждутся магией то mobx не заставляет их использовать - это всего лишь синтаксический сахар обращения к полям, хочешь не используй но вместо простой записи <div> task's folder name: {this.props.task.project.folder.name} </div> придется на каждое обращение к полям добавлять .get() вызовы <div> task's folder name: {this.props.task.get().project.get().folder.get().name.get()} </div> 3) Если работа самого mobx кажется "магией" то на хабре есть несколько постов (https://habr.com/users/bgnx/posts) с подробным объяснением как он работает. А основной механизм работы mobx можно даже в объяснить в одном предложении: При оборачивании компонента observer-хокком mobx врапит рендер-функцию компонента и при вызове присваивает в глобальную переменную (а при выходе из функции возращает предыдуще значение) ссылку на инстанс этого компонента чтобы при обращении к observable-сторам (которые создаются через observable(val)) через .get()-вызов происходило добавление компонента из глобальной переменный в массив подписок этого observable-стора и потом при изменении значения стора через .set("") происходил вызов рендера всех компонентов из массива подписок Правда надо заметить что в mobx в массив подписок добавляется не сам компонент а объект реакции который уже будет вызывать сайд-эффект обновления компонента, а computed это некий подпид реакции который вместо сайд-эффекта перевычисляет функцию (добавляя таким образом мемоизацию) и решает глитчи (лишние вычисления). Но даже все это можно написать в 85 строчках кода (https://habr.com/post/349022)
Ты правда считаешь, что резолв обзерваблов прост?

Само объявление компонента объектом - это хуево
Это приватное апи. Тебе никто не позволял так компонент объявлять.

Max
25.10.2018
01:10:47
Kelin
25.10.2018
01:10:52
Это приватное апи. Тебе никто не позволял так компонент объявлять.
Мне написали про объявление компонента объектом, я сказал, что имел в виду не объявление. Ты-то куда ~_~

Andrey
25.10.2018
01:11:31
что значит резолв обзерваблов?
Может биндинги мобх и не магия но то как он работает внутри - это магия.

Kevin
25.10.2018
01:12:41
Вообще, мне в таких случаях хочется говорить, что проблема не в том, какое решение приняли разработки реакта, а в том, что сам язык — говно и как ни выкручивайся, удобно не получится. Даже с этими грёбаными хэндлерами, которые либо на каждом рендере заново создаются, либо докидывают в код бойлерплейта

Сергей
25.10.2018
01:13:52
Опять вброс про mobx) Извини но я не могу не ответить) Мне кажется заявлять что mobx такой плохой потому что в нем куча "магии" сродни тому как не зная что такое промисы и имея только знакомство с коллбеками заявлять что async/await является магией. В этой "магии" есть минус только в том что она немного повышает порог вхождения (как и async/await которые требуют знания промисов) но зато после того как разобрался с mobx все становится прозрачным и ничем не хуже редакса в плане предсказуемости 1) Mobx не заставляет "обливаться говном декораторов". Декоратор это просто синтаксический сахар который экономит две строчки кода. Хочешь не используй декораторы и вместо одной строчки class SomeStore { @observable user = ""; ... } пиши 3 строчки class SomeStore { _user = observable(""); get(){ return this._user.get() } set(val){ this._user.set(val) } ... } 2) А если уже геттеры и сеттеры жс каждутся магией то mobx не заставляет их использовать - это всего лишь синтаксический сахар обращения к полям, хочешь не используй но вместо простой записи <div> task's folder name: {this.props.task.project.folder.name} </div> придется на каждое обращение к полям добавлять .get() вызовы <div> task's folder name: {this.props.task.get().project.get().folder.get().name.get()} </div> 3) Если работа самого mobx кажется "магией" то на хабре есть несколько постов (https://habr.com/users/bgnx/posts) с подробным объяснением как он работает. А основной механизм работы mobx можно даже в объяснить в одном предложении: При оборачивании компонента observer-хокком mobx врапит рендер-функцию компонента и при вызове присваивает в глобальную переменную (а при выходе из функции возращает предыдуще значение) ссылку на инстанс этого компонента чтобы при обращении к observable-сторам (которые создаются через observable(val)) через .get()-вызов происходило добавление компонента из глобальной переменный в массив подписок этого observable-стора и потом при изменении значения стора через .set("") происходил вызов рендера всех компонентов из массива подписок Правда надо заметить что в mobx в массив подписок добавляется не сам компонент а объект реакции который уже будет вызывать сайд-эффект обновления компонента, а computed это некий подпид реакции который вместо сайд-эффекта перевычисляет функцию (добавляя таким образом мемоизацию) и решает глитчи (лишние вычисления). Но даже все это можно написать в 85 строчках кода (https://habr.com/post/349022)
а теперь отвечу на твоё сообщение. Что я называю магией и неочевидностью вот делаешь ты где-то this._data.value = 1 и в большом проекте ты можешь даже не знать, что у тебя обновилось больше одного стора. А чего разрешение циклических обновлений? сколько там раз обновляется, а потом просто останавливается обновление не завершившись и оставив данные в неконсистентном состоянии?

Max
25.10.2018
01:13:57
Может биндинги мобх и не магия но то как он работает внутри - это магия.
Как он работает изнутри я описал выше в одном предложений. И в тех статьях на хабре все пошагово объясняется через написание аналога mobx-а.

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