Bill
{data && data.map() }
Ilya
подскажите, получаю данные фетчем из апи и записываю в стейт, дальше передаю этот стейт в другой компонент в виде props <Test data={this.state.data}/>, однако, насколько я понял т.к. данные родительский компонент получает с задержкой то при попытке обратиться в компоненте Test к data получаю в консоли props.data is null.
использовать состояние с возможностью подписки на поступление/изменение данных (Redux/Effector и т.д.) или замкнуть в коллбэк фетчера функцию вызов которой спровоцирует рендер родителя (https://ru.reactjs.org/docs/react-component.html#forceupdate) при этом надо быть уверенным что рендер родителя инициирует и рендер чилдрена (этого может не происходить если последний "чистый" PureComponent или мемоизированный функц.компонент и передаваемые в него пропсы не изменятся) PS: данные фетчатся асинхронно, на момент поступления данных надо как-то инициировать новый рендер таким образом чтобы в его контексте оказались поступившие данные - способов много, концепция и принцип один)
Oleg
ребят, у react hook forms нет паттернов для телефона? чет не нахожу. там только паттерны на этапе валидации есть
Артем
1, получаем 100, далее ещё вводим 1, нужно видеть 1100.
@el_anonimo2 Alex Слышали про KISS? https://codepen.io/kulichgg/pen/LYYamzd?editors=0010
Farik
Народ подскажите как быть в такой ситуации, у меня есть папка services там несколько js файлов по типу indexServices, mainServices и т.д. т.е. файлы для запросов к апи, я к ним обращаюсь через контекст, получается для каждого нового файла я пишу создаю контекст и об орачиваю весь проект в эти контексты, можно ли как-то объеденить их чтоли? что-бы не оборачивать в каждый новый контекст весь проект
Ilya
а зачем ты форм апдейт привел
ну это самый брутальный "в лоб" способ добится рендера когде тебе это необходимо, например из какого ни будь асинхронного действия - типо запроса. ну с таким же успехом можно туда замкнуть и функцию которая данные из запроса сразу засетапит в состояние компонента, что тоже инициирует рендер... вообщем тут способов много - это чтобы вы поняли замысел... что вам надо добиться принудительного рендеринга (как сайд-эффекта на изменение состояние или пряммы вызовом апи для обновления это уже не суть - вопрос архитектуры и оптимизации)
Alex
@el_anonimo2 Alex Слышали про KISS? https://codepen.io/kulichgg/pen/LYYamzd?editors=0010
пример который ты скинул, не правильно отрабатывает если вводить 1000
Артем
Нет , а есть ссылка ?))
https://ru.wikipedia.org/wiki/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF)
Alex
возможно, сделал на скорую руку
Просто не нужно манипулировать с результатом который ты получаешь в onChange потому что он будет эквивалентен тому что ты вставляешь в value
Alex
https://ru.wikipedia.org/wiki/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF)
Спасибо за ссылку , а к чему это ?
🦜
Подскажите как сделать, чтобы Drawer из mui закрывался при кликне вне его. Есть один нюанс. Внутри Drawer есть селекты, которые тригерят клик вне Drawer и закрывают его, когда выбирается значение. https://material-ui.com/components/selects/ https://material-ui.com/api/drawer/
Alexander
Юрий
ребят, нормально будет разделить такую вещь как: модалка в ней форма которую можно редактировать, то есть 2 состояния, так как форма не маленькая, разделить на 2 разных компонента и просто заимпортить, что в 1 все не держать?
Gennadii
Подскажите плз опен сорс проекты откуда можно почерпать хороших практик работы со сложными формами.
Герман
https://codesandbox.io/s/material-demo-vui43 Демка
const handleClickAway = (e) => { e.stopPropagnation() setOpen(false); };
Герман
а не, тогда вообще не закроется
🦜
const handleClickAway = (e) => { e.stopPropagnation() setOpen(false); };
Так перестанет работать click away
Alexey
Alexey
https://codesandbox.io/s/material-demo-vui43 Демка
const handleClickAway = e => { if (!e.target.classList.contains('MuiMenuItem-root')) { setOpen(false); } }; можно так костыльнуть
🦜
const handleClickAway = e => { if (!e.target.classList.contains('MuiMenuItem-root')) { setOpen(false); } }; можно так костыльнуть
заебок. То это хуйня лочила мне дальнейшую разработку фичи
Gennadii
Ребят, подскажите плз опен сорс проекты или статьи\видео\UML диаграммы =) откуда можно почерпать хороших практик работы со сложными формами.
Gennadii
Ты хочешь сам писать или использовать какой-то инструмент?
в идеале без доп библеотек, но если есть хорошие решения для финал форм или редакс форм было бы здорово, у меня всегда логика большой формы в дикую кашу превращается что бы я не использовал, особенно когда нужно динамически добавлять\изменять поля с кучей чек боксов и прочей радости.
Герман
заебок. То это хуйня лочила мне дальнейшую разработку фичи
https://codesandbox.io/s/material-demo-xir9p вот тебе решение без костыля
Юрий
ребят, вот есть такая форма, которая редактируется, но у нее получается нету кнопок сохранить/ отменить. А только одна кнопка сверху! как такое можно реализовать? написать все в одной функции, что бы вызывать один и тот же метод, который будет проверять флаг true/false и в зависимости будет сохранять или открывать редактирование?
🦜
в идеале без доп библеотек, но если есть хорошие решения для финал форм или редакс форм было бы здорово, у меня всегда логика большой формы в дикую кашу превращается что бы я не использовал, особенно когда нужно динамически добавлять\изменять поля с кучей чек боксов и прочей радости.
Ну final form и так хорошее решение. Можешь почитать статью автора, как он писал решение. Называется "Дорога к клетчатому флагу". Если тебя интересует как реюзабельность делать логики, то тут больше про паттерны проектирования, программирования. Что не особо относиться к формам
Андрей
Привет, подскажите, почему relationMutation is not a function
Андрей
Андрей
используеься react-apollo-hooks
Alexey
используеься react-apollo-hooks
а в документацию не?
Sergey
а в документацию не?
ну справедливости ради, доки у них гавно))
Андрей
а в документацию не?
не, потому что в другом месте подобное работает.
Юрий
У тебя эта форма открывается на одном урле или form/edit, form/create?
eще лучше, у меня форма открывается внутри модалки
🦜
eще лучше, у меня форма открывается внутри модалки
хуева конечно, но ты можешь урлы сделать и чекать их и в зависимости от урла менять логику
Alexey
The `useMutation` result is a tuple with a mutate function in the first position and an object representing the mutation result in the second position.
Madiyar
ребята у вас есть какие либо конвенции по выставлению id на DOM элементы для e2e тестирования?
Madiyar
ну не верю я что все по xpath обращаются к DOM
Sergey
уже нет
да ладно? Пойду глядеть)
Юрий
хуева конечно, но ты можешь урлы сделать и чекать их и в зависимости от урла менять логику
конечно не очень, едиственный варинт нашел, создать 2 метода, которые возвращают 2 разных состоянях, создать стейт для флага true, false, метод который меняет флаг, и рендер который в зависимости от флага дает вьюшку
Андрей
The `useMutation` result is a tuple with a mutate function in the first position and an object representing the mutation result in the second position.
очень странно, что в другом месте работает. и думал что не в этом траблы. Спасибо
Sergey
хм, да вроде получше стало
Dmitry
Ребят, подскажите плиз, есть Роут допустим «/recommendations», если запускать SPA на localhost или деплоить herokuapp и при нажатии на обновление страницы на этом роуте (CMD+R) все ок, а вот сейчас заделоил на купленный хостинг пишет что
Dmitry
Кто нить сталкивался с подобным?
Sergey
далее без подробностей о хостинге вряд ли кто чё подскажет 😉
Ilya
ребята у вас есть какие либо конвенции по выставлению id на DOM элементы для e2e тестирования?
ну вообще обычно id стараются не задействовать а проставляется кастомный аттрибут типо 'data-qa' и это как-то автоматизируется в процессе сборки, например чем-то вот таким https://www.npmjs.com/package/babel-plugin-transform-react-qa-attributes
Dmitry
далее без подробностей о хостинге вряд ли кто чё подскажет 😉
Хостинг spaceweb ) Ладно, пойду в службу поддержки отпишусь
Anonymous
@el_anonimo2 Alex Слышали про KISS? https://codepen.io/kulichgg/pen/LYYamzd?editors=0010
Интересно, спасибо. Как работает match.replace(/00/g, '') ? Как понимаю, value.replace(/(\d+)/g) возвращает match, в котором нет тех двух нулей /00/, которые ищет второй replace. Тогда зачем искать /00/?
Sergey
Хостинг spaceweb ) Ладно, пойду в службу поддержки отпишусь
если там апач, то можно на эту тему гуглить. В create-react-app можно по деплою почитать
Артем
Интересно, спасибо. Как работает match.replace(/00/g, '') ? Как понимаю, value.replace(/(\d+)/g) возвращает match, в котором нет тех двух нулей /00/, которые ищет второй replace. Тогда зачем искать /00/?
ты о чем? у тебя match и value - судя по тому, что написано - это строки... т.е. операции над двумя разными строковыми объектами
Anonymous
ты о чем? у тебя match и value - судя по тому, что написано - это строки... т.е. операции над двумя разными строковыми объектами
Как работает это регулярное выражение? Первый value.replace(/(\d+)/g возвращает само число. Затем match.replace(/00/g, '') ищет в возвращённом самом числе вещи, которых там заведеомо нет, видимо, поэтому возвращает само чило второй раз. И затем оно * 100.
Anonymous
Для опыта сделал '123'.replace(/(\d+)/g, match => match.replace(/(abc)/g,'')*100), получил 12300.
Anonymous
Заменил /00/ на abc.
Артем
Как работает это регулярное выражение? Первый value.replace(/(\d+)/g возвращает само число. Затем match.replace(/00/g, '') ищет в возвращённом самом числе вещи, которых там заведеомо нет, видимо, поэтому возвращает само чило второй раз. И затем оно * 100.
еще раз =))) по тому, как ты это написал в чате - это просто две независимые строки, в которых производится какая-то замена... сложно по этому что-то сказать... напиши целиком кусок кода. по которому нужна помошь - будет всем легче
Артем
вот так другое дело - теперь хоть ясно, что есть что =)))
T.A
ребят, подскажите пожалуйста лучший момент, чтобы скопировать один проп (объект) в локальный стэйт компонента?
Артем
все верно... в 123, который найден и передан во внутреннюю функцию в нем нет подстроки abc, чтобы заменить их на '' и потому 123 * 100 - и по итогу 12300 на выходе
Anonymous
Вопрос был о работе данного частного регулярного выражения. По случаю, оно работает только для целых чисел. Изначально задача была сортировать в React Table v. 7 столбец по диапазону значений. В столбце сумма в копейках от 100 до 78900. Этот столбец отображаю в рублях, поэтому окошко диапазона для фильтрации тоже должно принимать 1 и 789 вместо 100 и 78900. Использую метод NumberRangeColumnFilter() из https://codesandbox.io/s/github/tannerlinsley/react-table/tree/master/examples/filtering, в точности, как там.
Yury
didUpdate или didMount?
если у тебя компонент будет рисовать ПОСЛЕ того как проп уже существует - то cDM, если не факт - то cDU (но нужно условия будет прописать чтоб у тебя там не зациклилось)
Dmitry
didUpdate или didMount?
Дело точно не в этом, сервер не отдаёт. Локально же и на herokuapp все работает ок
Sergey
кто-то промахнулся ответом)
Юрий
можно используя formik + yup сделать задать валидацию по количеству цифр? смотрю в доках, тут можно задать минимальное и максимальное значение именно числа, но не количество их
Stripe
Првет всем
Stripe