Попробовал закидывать в паблик config.json и получать его через Axios в App useEffect. Но в js файлах тогда нет доступа к конфигу, т к он андефайнд.
Какие есть способы настройки проекта из внешнего конфига или решения моей проблемы?
Всем спасибо
Скачал, положил в стм, отрендерил приложение.
Я так и делаю, только без стм. Но что, если мне нужен доступ не в Jsx файлах?
Ты скорее всего обращаешься до того как скачал. Нужно выстроить структуру так, чтобы обращения были после скачивания
Вот в этом и проблема. Загрузка у меня идёт даже до рендер Апп. Но js файлы выполняются до этого. Как ограничить в таком случае?
У тебя есть файлы которые выполняются без рендеринга основного компонента App? 99.9% что нет. Пу сути делаешь компонент оберку, если конфиг есть, то рендеришь апп, если нет, то рендеришь спинер, качаешь конфиг и потом рендеришь апп.
Вот так у меня и сделано
Если так сделано, то не должно быть что "Но js файлы выполняются до этого". Надо дебажить. Выводи в лог конфиг там где ты его кладешь после скачивания и ге используешь и смотри цепочку почему у тебя проблемы. Можно попробовать его положить и считать в window.config это исключит всякие кеширования модулей и замыкания. Если так сработает, то проблема у тебя скорее всего в замыкании.
Вот я в window.config и кладу как раз. И из компонентов у меня там актуальный конфиг. А вот во всех js файлах = undefined.
а window там определен или тоже undefined?
Определен
пришли скрин где ты читаешь данные
причем странно, если я вывожу просто window, то нужные данные там есть. Но .config уже undefined И это в том же файле
Это значит что ты читаешь до того как данные туда попали.
так window и window.config то выводится в одно и то же время. Т.е почему в виндоу тогда выводится актуальная инфа, а в виндоу.конфиг - до получения данных? т е я конфиг вывожу даже позже виндоу
объект передается по сылке и на window выводится ссылка. Можешь попробовать через setTimeout вывести window.config через секунду и он у тебя отобразится.
покажи index.js
Выведи в консоль тут надписи и выведи res.data после window.config.
У тебя не так сделано мягко говоря
Я делал это в App. В useEffect получал конфиг, и при смене изКонфЛоадед рендерир либо спинер, либо остальные данные. Причем все остальное из эп удалял
У меня так с конфигом пользователя все работает. Возможно промис не дожидался. Все это гадание на кофейной гуще без кода.
в начале инициализируется стор, а потом в него можно что-то записать. Он не инициализируется в мосент записи данных.
Так я понимаю. Но я в него тут ничего не записываю. И инийиализирую после получения данных
У тебя запустился файл, все что он импортит запускается, потом идет твой код выполняться. То есть до axios все импорты исполнены.
Понял. Спасибо.
Ну по этой логике у меня всегда js файлы проекта, которые используются в компонентах, всегда будут исполняться до того, как я получаю в App данные из конфига. Разве нет?
Приложение обычно завязано на компонент App. Пока он не запущен все остальное так же не запущено. Именно поэтому мы его не отображаем, пока у нас нет конфига. <Auth><App></Auth> а Auth уже отображает спинер пока нет конфига и рендерит children(у нас это App) только после того как конфиг есть и сохранен куда следует. Отдельно обычно стоит стор(например редакс) который мы цепляем в компонент обертку, чтобы сохранить туда данные. в этом случае он у нас инициализируется до App.
Спасибо. Сейчас попробую сделать обёртку
Выложи в репозиторий или на codesandbox, я посмотрю где баг
https://codesandbox.io/s/busy-brown-qo1zt?file=/src/someFunc.js
https://codesandbox.io/s/aimrr-wp16s?file=/src/App.js
так до сих пор не работает https://codesandbox.io/s/aimrr-forked-tle5k как был конфиг андефайнд в джс файле, так и остался
Ты конфиг должен сам задать, чтобы его загрузить.
так я его и задал. В папке паблик
Так нельзя
А то решение, которые ты предллжил - просто переписал консоль лог в другое место
Так мне вот так и надо сделать. Изначальный вопрос в этом. Я там вроде описал это( Мне нужно, чтобы во всех файлах использовался внешний конфиг
Извини конечно, но ты все умудряешься сделать через ж....
Вот что ты делаешь.
извини конечно, но мне нужна переменная, а не функция, где я буду вызывать виндоу.конфиг из компонента
const varBasedOnConfig = window.config; - выполнилось один раз при первом импорте. Больше они никогда не изменится
то, что я делаю непрваильно, я итак понимаю. Но по факту, мне нужен джс файл, где будет инициализирована переменная из конфига. А функцию я привел для примера
Бери из window.config
https://codesandbox.io/s/aimrr-forked-c2jum?file=/src/AppWrapper.jsx Можно сделать вот так еще. НО!!! нельзя присваивать новое значение config. только config.somefield
только так. Как у тебя работать не будет
Обсуждают сегодня