169 похожих чатов

Всем привет Кто подскажет, как лучше всего сделать внешний конфиг файл?

Попробовал закидывать в паблик config.json и получать его через Axios в App useEffect. Но в js файлах тогда нет доступа к конфигу, т к он андефайнд.
Какие есть способы настройки проекта из внешнего конфига или решения моей проблемы?
Всем спасибо

49 ответов

18 просмотров

Скачал, положил в стм, отрендерил приложение.

RR- Автор вопроса

Я так и делаю, только без стм. Но что, если мне нужен доступ не в Jsx файлах?

Ты скорее всего обращаешься до того как скачал. Нужно выстроить структуру так, чтобы обращения были после скачивания

RR- Автор вопроса

Вот в этом и проблема. Загрузка у меня идёт даже до рендер Апп. Но js файлы выполняются до этого. Как ограничить в таком случае?

У тебя есть файлы которые выполняются без рендеринга основного компонента App? 99.9% что нет. Пу сути делаешь компонент оберку, если конфиг есть, то рендеришь апп, если нет, то рендеришь спинер, качаешь конфиг и потом рендеришь апп.

RR- Автор вопроса

Вот так у меня и сделано

Если так сделано, то не должно быть что "Но js файлы выполняются до этого". Надо дебажить. Выводи в лог конфиг там где ты его кладешь после скачивания и ге используешь и смотри цепочку почему у тебя проблемы. Можно попробовать его положить и считать в window.config это исключит всякие кеширования модулей и замыкания. Если так сработает, то проблема у тебя скорее всего в замыкании.

RR- Автор вопроса

Вот я в window.config и кладу как раз. И из компонентов у меня там актуальный конфиг. А вот во всех js файлах = undefined.

а window там определен или тоже undefined?

RR- Автор вопроса

Определен

пришли скрин где ты читаешь данные

RR- Автор вопроса

причем странно, если я вывожу просто window, то нужные данные там есть. Но .config уже undefined И это в том же файле

Это значит что ты читаешь до того как данные туда попали.

RR- Автор вопроса

так window и window.config то выводится в одно и то же время. Т.е почему в виндоу тогда выводится актуальная инфа, а в виндоу.конфиг - до получения данных? т е я конфиг вывожу даже позже виндоу

объект передается по сылке и на window выводится ссылка. Можешь попробовать через setTimeout вывести window.config через секунду и он у тебя отобразится.

RR- Автор вопроса

да, все правильно Окей, файл у меня для получения основного url Загрузка данных у мменя в индекс.js до рендера App. Т е then render(<App />) после axios.get Как сделать так, чтоб этой файл исполнялся после рендера эпп?

покажи index.js

RR- Автор вопроса

Выведи в консоль тут надписи и выведи res.data после window.config.

У тебя не так сделано мягко говоря

RR- Автор вопроса

Я делал это в App. В useEffect получал конфиг, и при смене изКонфЛоадед рендерир либо спинер, либо остальные данные. Причем все остальное из эп удалял

У меня так с конфигом пользователя все работает. Возможно промис не дожидался. Все это гадание на кофейной гуще без кода.

RR- Автор вопроса

тогда небольшой вопрос, чтобы понимать смысл, а дальше уже разберусь. Вот с приведенного на скриншоте кода по какой причине у меня вызывается функция из js файла, которые используется при конфигурации стора? Ведь стор конфигурируется после получения конфига с сервера

в начале инициализируется стор, а потом в него можно что-то записать. Он не инициализируется в мосент записи данных.

RR- Автор вопроса

Так я понимаю. Но я в него тут ничего не записываю. И инийиализирую после получения данных

У тебя запустился файл, все что он импортит запускается, потом идет твой код выполняться. То есть до axios все импорты исполнены.

RR- Автор вопроса

Понял. Спасибо.

RR- Автор вопроса

Ну по этой логике у меня всегда js файлы проекта, которые используются в компонентах, всегда будут исполняться до того, как я получаю в App данные из конфига. Разве нет?

Приложение обычно завязано на компонент App. Пока он не запущен все остальное так же не запущено. Именно поэтому мы его не отображаем, пока у нас нет конфига. <Auth><App></Auth> а Auth уже отображает спинер пока нет конфига и рендерит children(у нас это App) только после того как конфиг есть и сохранен куда следует. Отдельно обычно стоит стор(например редакс) который мы цепляем в компонент обертку, чтобы сохранить туда данные. в этом случае он у нас инициализируется до App.

RR- Автор вопроса

Спасибо. Сейчас попробую сделать обёртку

RR- Автор вопроса

ну вот быстро накидал. Результат тот же самый. Да и я разницу не понимаю( И этот файл я передаю в индексе в реактДом.рендер. По описанной логике тогда это должно было бы работать

Выложи в репозиторий или на codesandbox, я посмотрю где баг

RR- Автор вопроса

https://codesandbox.io/s/busy-brown-qo1zt?file=/src/someFunc.js

https://codesandbox.io/s/aimrr-wp16s?file=/src/App.js

RR- Автор вопроса

так до сих пор не работает https://codesandbox.io/s/aimrr-forked-tle5k как был конфиг андефайнд в джс файле, так и остался

Ты конфиг должен сам задать, чтобы его загрузить.

RR- Автор вопроса

так я его и задал. В папке паблик

Так нельзя

RR- Автор вопроса

А то решение, которые ты предллжил - просто переписал консоль лог в другое место

RR- Автор вопроса

Так мне вот так и надо сделать. Изначальный вопрос в этом. Я там вроде описал это( Мне нужно, чтобы во всех файлах использовался внешний конфиг

Извини конечно, но ты все умудряешься сделать через ж....

Вот что ты делаешь.

RR- Автор вопроса

извини конечно, но мне нужна переменная, а не функция, где я буду вызывать виндоу.конфиг из компонента

const varBasedOnConfig = window.config; - выполнилось один раз при первом импорте. Больше они никогда не изменится

RR- Автор вопроса

то, что я делаю непрваильно, я итак понимаю. Но по факту, мне нужен джс файл, где будет инициализирована переменная из конфига. А функцию я привел для примера

Бери из window.config

RR- Автор вопроса

вот, задача, которая мне нужна. И приведенный тобой пример в сендбоксе ее не решает, к сожалению(

https://codesandbox.io/s/aimrr-forked-c2jum?file=/src/AppWrapper.jsx Можно сделать вот так еще. НО!!! нельзя присваивать новое значение config. только config.somefield

только так. Как у тебя работать не будет

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта