Konstantin
Не нашел чатов по быстрому
Ilya
Не нашел чатов по быстрому
значит стоит поискать не по быстрому
rovnyart
зачем инит пихать в депсы, если он создается каждый рендер?
это не я пихаю, eslint автоматом пихает при сохранении
rovnyart
в общем, похоже в моем случае только глушить правило поможет, всем спасибо
Konstantin
значит стоит поискать не по быстрому
По быстрому лучше, но не всегда
Александр
в общем, похоже в моем случае только глушить правило поможет, всем спасибо
В вашем случае надо написать код так, чтобы loadIntegrations не пересоздаваль на каждый ререндер
rovnyart
то есть обернуть ее в useCallback?
rovnyart
в том месте, где она определена
Александр
Ilya
так проще же suppress варнинга
либо научится решать эту проблему чтобы не вырубать правило в каждом подобном месте)
Александр
либо научится решать эту проблему чтобы не вырубать правило в каждом подобном месте)
мой коммент выражал сарказм, когда закрывают глаза перед проблемой в надежде что она изчезнет
artalar
@artalar Сколько звезд у либы?)
Не понял, что не так?
rovnyart
например
а как это по-нормальному сделать? У меня проект весь на классах, я только вот сейчас по заветам Абрамова для новых компонентов использую хуки. Дата провайдер, где определена эта loadIntegrations написан классом, со своими setState и тд. Я же не могу просто вот в том же месте, где щас взять и написать типа const fetchData = useCallback(this.props.data.loadIntegrations)
rovnyart
а в том месте, где она определена вроде как нельзя использовать useCallback
Александр
Если покажите код где определена эта функа то может станет понятнее
Daniil
гайс, хелп, есть Formik (инпут с валидацией) справа абсолютом наложена (икнка ошибки - когда есть, если нету - то иконка удалить), набираю текст в инпуте - всё ок, нажимаю на сбросить - вызывается onBlur всё красное - ошибки валидации, но коллбек на иконку (reset) не вызывается, клик фиксируется на всплытие в document.body, но reset не вызывается, как быть? Если onBlur не отдам инпуту, то всё работает прекрасно (без валидации)
Dmitriy
Не понял, что не так?
Декларативно-очевидно)
El
Научный интерес, юниоры нынче предполагаются знать типизацию?
Александр
Научный интерес, юниоры нынче предполагаются знать типизацию?
У меня да, ну или как минимум не сопротивляться typescript’у
El
Сопротивляться? Это настаивать на Flow ?
Александр
Сопротивляться? Это настаивать на Flow ?
У меня негативный опыт с флоу
Nikita
А у меня нет, тайпскрипт от лукавого
Александр
А у меня нет, тайпскрипт от лукавого
Никого не агитирую, просто опытом делюсь
Александр
Сопротивляться? Это настаивать на Flow ?
Сопротивляться - это отказываться изучать программирование и предпочитать ‘программировать’ на фреймворке/библиотеке без понимания происходящего.
Александр
Коли там и обучают, то это хорошо.
Ну программировать надо уметь всё-таки, подразумеваю что на вакансию frontend react человек знает уже язык
El
Полезно. В разных местах могут учить, могут "сам учи".
Альберт
Кто-нибудь работал с react-mapbox-gl от Uber? Что-то не пойму как на определенный слой навесить событие, подскажите плз.
Александр
Полезно. В разных местах могут учить, могут "сам учи".
Главное чтобы не сопротивлялся клиент обучению
El
Такие есть? В своё время я бы далеко был от сопротивления.
Александр
Как няньки стоять и утешать при каждом undefined is not a function не очень весело
Александр
типоскрипт*
О вкусах не спорят
Никита Суханов
nom run build такая ошибка. что могло пойти не так?
El
Блоки кода или логов можно выложить, поместив между парой ```.
Александр
Блоки кода или логов можно выложить, поместив между парой ```.
На пережатом скриншоте же лучше читается :(
Никита Суханов
Mikhail
че че сделал?
заменил в бандле react.createElement на кастомный импорт, ибо react.createElement("div") минифицируется в e.createElement("div"), a кастомный импорт типа MyReactCreateElement -> e("div")
Mikhail
я не знаю, может cra это подефолту делает, но я с него ушел год назад на rollup, т.к. продакшен-бандл меньше был процентов на 10
Mikhail
Не совсем понятно какой импорт заменили, можете поподробнее
babel({ presets: [ ["@babel/react", {"pragma": "ReactCreateElement"}], ], plugins: [ ["babel-plugin-jsx-pragmatic", {module: "ReactCreateElement", import: "ReactCreateElement"}], ], }),
Mikhail
ReactCreateElement: import React from 'react'; export default React.createElement;
Александр
Понятно, надо тоже так попробовать, у меня не babel правда, но для tsc тоже можно кастомную фабрику для jsx элементов задавать
Артём
если мне нужно передать реф элемента наверх через 2 промежуточных функциональных компонента, я их предварительно должен создать через React.forwardRef()?
Артём
Можно просто ref через пропсы прокинуть
не прокидывается функциональным
Mikhail
не прокидывается функциональным
Всё прокидывается, назови какие-нибудь типа myRef и прокидывай
Alex
const actionOne = () => dispatch => { dispatch({ type: "ACTION_ONE", payload: "The_action_itself" }) } Люди, что это за синтаксис такой? Ктонибудь может объяснить? (пример работает, но хотелось бы детально разобраться)
Mikhail
Ты создаёшь функцию actionOne которая возвращает dispatch, которая выполняет вызов функции dispatch
Не возвращает диспатч, а возвещает функцию, которая принимает диспатч
Alex
dispatch внутри actionOne?
Лёва 🎃
Функция которая возвращает функцию которая шлёт диспатч куда-то
Лёва 🎃
Это кстати в @js_noobs_ru
Mikhail
Никуда диспатч не пересылается, не надо
Alex
А последний dispatch - это функция которая аргументом принимает объект?
Mikhail
Но можно и такую же функцию как и actionOne в него передать
Alex
То есть первый dispatch - это объявление, а второй - callback?
Mikhail
То есть первый dispatch - это объявление, а второй - callback?
Первый диспатч - название аргумента функции, второй - вызов его как функции
Mikhail
Тут функциональщина головного мозга: есть функция, которая возвращает функцию, куда передается другая функция, куда передают уже объект экшена
Alex
Первый диспатч - название аргумента функции, второй - вызов его как функции
А почему тогда аргумент не указали в первых скобках? Что это за "const actionOne = () => dispatch => ..." ?!
Mikhail
А почему тогда аргумент не указали в первых скобках? Что это за "const actionOne = () => dispatch => ..." ?!
Чтобы прокинуть это в коннект, где оно ещё раз обернется в фунцию
Mikhail
Всё ради того, чтобы не иметь глобальную функцию диспатч, чтобы она инжектилась динамически в рантайме, если захочется больше одного стора иметь
Alex
Чтобы прокинуть это в коннект, где оно ещё раз обернется в фунцию
Не пойму, как может быть первый dispatch аргументом, когда он идет уже после стрелки. Там начинается уже тело функции actionOne, правильно?
Mikhail
Не представляю как это дебажить, если ещё и диспатчиться будет в разные сторы..
Mikhail
const actionOne = function () { return function (dispatch) { dispatch({ type: "ACTION_ONE", payload: "The_action_itself" }) } }
Mikhail
не проще в стрелку завернуть?
так была стрелка, непонятна она @wwwal2