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

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

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

49 ответов

6 просмотров

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

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

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

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

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

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Can I forward ports (including the SSH port) between two machines without SSH? I know I can forward SSH server port from machine A (which blocks all requests by firewall) to ...
required optional
5
Всем вечера. Подскажите как лучше сделать. делаю на Д10 Например будет база данных на SQLite. в ней будет много таблиц. более 50шт Типа справочник. Содержать ID Name Id p...
Андрей Т 🐎
10
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
Карта сайта