Daniil
const Company = ({ id }) => { const companiesContext = useContext(CompaniesContext); const { getCompanyInfoById } = companiesContext; useEffect(() => { getCompanyInfoById(id); }, [id]); const { company } = companiesContext; const [companyData, setCompanyData] = useState({ name: '' }); useEffect(() => { if (company) setCompanyData({ name: company.companyInfo.name }); }, []);
у тебя твой эффект где на компани идет проверка будет работать только на первый вызов, далее из-за пустых дипсов он не будет отрабатывать, тк они будут равны и нет изменений. Считай что это cDM (на самом деле нет)
Igor
в рамках данного кейса что подразумеваете лейзи инициализацию? return null без данных? А когда инфа есть то уже рендерить компонент?
Igor
не получается? А что лежит в company? Сделай консоль лог в эффекте
Aidyno
useEffect(() => { if (company) setCompanyData({ name: company.companyInfo.name }); }, [company]);
Igor
какой объект?
Aidyno
со всеми мне нужными полями
Igor
а почему не работает? Что за ошибка?
Aidyno
companyInfo: {id: 1, name: "HP", contacts: null, webSite: null, checkedStatus: "REQUIRES", …} companyProvider: {products: Array(1), comments: null} companyVendor: {certLevels: Array(0), vendorProducts: Array(3), comments: Array(0), vendorProviders: Array(8)} provider: true vendor: true __proto__: Object
Igor
ефект не перед, а после рендера
скорее всего, я не помню точно как там)
Igor
по логике вещей да, перед рендером
Aidyno
useEffect(() => { if (company) setCompanyData({ name: company.companyInfo.name }); console.log(company); }, [company]); если чисто в консоли выводить, то пашет. А филды мои сэтить не желает
Bogdan
`cannot read property name undefined`
поставь имя дефолтное
Igor
`cannot read property name undefined`
ну ты говоришь что тебе в эффекте приходит нужный тебе company со всеми полями, но пишет что ошибка, у тебя объект случаем не мутируется?
Aidyno
поставь имя дефолтное
Пустая строка не канает*
Bogdan
в условие допиши company.companyInfo.name
Igor
скорее всего проблема в проверке, допиши проверку на наличие имени
Aidyno
const Company = ({ id }) => { const companiesContext = useContext(CompaniesContext); const { getCompanyInfoById } = companiesContext; useEffect(() => { getCompanyInfoById(id); }, [id]); const { company } = companiesContext; const [companyData, setCompanyData] = useState({ name: '' }); useEffect(() => { if (company && company.companyInfo.name) setCompanyData({ name: company.companyInfo.name }); console.log(company); }, [company]);
Dmitry
Ребят, а случайно отдельной группы, по тестироваю нет?
Andrey
Ребят, а случайно отдельной группы, по тестироваю нет?
по реакту, вроде не находилось (есть с жестом на 12 участников 👀, если тестирование связанное с реактом, проще тут спросить)
Valentin
Что за фигня, почему не вызывается handleWindowScroll https://pastebin.com/WmMXvPM7 . Компонент рендерится, ифа сотка!
Bogdan
ошибка какая
Igor
Нет(((
на наличие companyInfo не нужна ли проверка?
Aidyno
ошибка какая
TypeError: Cannot read property 'name' of undefined
Bogdan
TypeError: Cannot read property 'name' of undefined
дебаггер пиши и смотри что пришло в обьекте
Andrey
Поделись хоть этой, буду рад))
ну я бы на твоем месте спросил тут, если тесты реакта, или в @js_ru если просто тестирование (@jest_ru - чатик с полтора дровосеками)
Igor
if (company && company.companyInfo && company.companyInfo.name)
Aidyno
дебаггер пиши и смотри что пришло в обьекте
Так, добавил вот это и заработало if (company && company.companyInfo && company.companyInfo.name)
Igor
к сожалению оциональный чейнинг не завезли, но пока так)
Bogdan
Так, добавил вот это и заработало if (company && company.companyInfo && company.companyInfo.name)
ну да, так и нужно было, можно бабель настроить и через ? смотреть
Igor
не, тянуть лодаш ради этого точно не стоит
Denis
не, тянуть лодаш ради этого точно не стоит
та он скорее всего уже стоит
Aidyno
Спасибо всем
Bogdan
лучше дождаться выхода в спеку
да в тс есть ф-я , g(obj, "", "", "") забыл как называется
Igor
да в тс есть ф-я , g(obj, "", "", "") забыл как называется
надо глянуть, недавно на тс переводить начал, не в курсе о всех возможностях
Bogdan
гугол не дал результатов)
typesafe-get, я не то сказанул, это либа, думал в тс
ℜ𝔬𝔪𝔞𝔫
Всем привет. Кто работал с stripe? как мне правильно создать випадающий список стран? react-stripe-elements - не предоставляет такого элемента
Bogdan
o_O есть в тс, но нет в джс?
нужно чекать, я забыл) но либа typesafe-get,
Denis
нужно чекать, я забыл) но либа typesafe-get,
повторюсь, есть ф-я get в лодеше, а лодеш скорее всего уже есть в пакете
Igor
у меня хэлпер на десяток строк для проверки аналогично get функции лодаша
Igor
но отдельные пакеты под такое это конечно пушка) Был где-то пакет на проверку число это или нет)
Denis
нужно чекать, я забыл) но либа typesafe-get,
а в этом пакете какой-то бред в индексе
Bogdan
а в этом пакете какой-то бред в индексе
мы юзаем , норм синтаксис даже
Bogdan
там в вебпак нужно надстройку вроде еще
Valentin
Igor
это обычная функция, которая принимает объект и строку с путем до нужного проперти, сплитишь строку и дальше цикл по массиву- каждый элемент массива прибавляешь к объекту - если он не существует - ретернишь null/undefined, иначе последнее значение в последнем проперти
Denis
эм, а почему нет?
ну пушто ты портал там создаешь, а он скролл страницы блочит, надо обрабатывать скролл контейнера - слушай его скролл
Igor
но тянуть либы под это точно не стоит)
Denis
мы юзаем , норм синтаксис даже
там типы ручками забили просто 5 вариаций параметров дай им ссылку на рекурсивный тайпинг и не будет ограничения на UP TO 5 PARAMETERS
Valentin
ну пушто ты портал там создаешь, а он скролл страницы блочит, надо обрабатывать скролл контейнера - слушай его скролл
а мне не нужно смотреть на скрол контейнера, а именно на всю страницу. это кусочек поповера. Выше компонент поповер, если нужно показать вспывашку, она вызывается через этот компонент, который порталит поповер на отдельную ноду в корне документа. и если мы что то показываем, я хочу добавить ивент на скрол документа, если он сработает. я закрою поповер (или обновлю его положение на странице) Ну или я не понимаю взаимосвязь в компоненте, который создает портал, почему не могу иметь ивенты на весь документ?
Denis
а почему здесь не работает?)) что за portalNode
куды ты монтируешь портал свой?
Valentin
куды ты монтируешь портал свой?
на предсозданную ноду, указанную в index.html const portalNode = document.getElementById("portal"); он все рисует. без проблем
Denis
на предсозданную ноду, указанную в index.html const portalNode = document.getElementById("portal"); он все рисует. без проблем
componentDidMount() { window.addEventListener("scroll", this.handleWindowScroll); portalNode.appendChild(this.portalNode); } а здесь portalNode ты где определил?
Valentin
а он в дереве где находится? рядом с рутом?
да, на одном уровне. прим <body> <div id=root /> <div id=portal /> </body>
Denis
да, на одном уровне. прим <body> <div id=root /> <div id=portal /> </body>
ну, он и перекрывает скролл рута тем, что поверх встает, вероятнее всего
Valentin
ну, он и перекрывает скролл рута тем, что поверх встает, вероятнее всего
так я же ивент добавляю к виндоу... рили не понимаю (((
Василий
при использовании TS надо импортировать import * as React from 'react'; - почему со * ?
Volodymyr
Ребят привет! Есть какой то простой способ, применять анимацию когда компонент размонтируеться или стейт сменился? что без поключения всяких библиотек
Denis
так я же ивент добавляю к виндоу... рили не понимаю (((
так ивент то добавляется, но скролл не фурычит. убери ремувлистенер, закрой портал, и, мне кажется, что оно будет работать
Volodymyr
css transition
это самом собой но оно не работает когда компонент убираеться из дом