Javascript-форум (https://javascript.ru/forum/)
-   Сборка проекта, утилиты (https://javascript.ru/forum/server-tools/)
-   -   зацикливание импорта (https://javascript.ru/forum/server-tools/87008-zaciklivanie-importa.html)

fxobject 07.07.2026 23:23

зацикливание импорта
 
кароч! имеем задачу на react. реализована таблица, в которой ячейка таблицы представляет собой компонент выбора элемента таблицы базы данных (справочника). Т.е. в этой ячейке кнопицка, при нажатии на которую открывается модальная форма выбора из таблицы sql (т.е. тоже таблица)
краткий импорт в row.js такой ячейки:
__inputSelect ->__selectPopandos->__select ->__sqlTable->__table->__tableList ->__row

для умных хочу подчеркнуть - это не наследование классов - это импорт.
как мы видим - зацикливание импорта. Но удивительно все собирается и работает.
Затем - хотим чтобы в этой ячейке был не просто выбор из справочника, а чтобы можно было выбрать один из нескольких справочников и потом выбрать из этого справочника. т.е.
в ячейке появляется select, что то типа такого
<option value="1">справочник 1</option>
<option value="3">справочник 2</option>
<option value="2">справочник 3</option>
Выбираешь вид справочника и потом собственно можешь выбрать значение из базы. Надеюсь - понятно.
Так вот для этого делаем производный класс от
__inputSelect например __inputCombo
и дальше все та же цепочка
так вот в этом случае получим ошибку при сборке.
Так вот вопрос - собственно почему не возникает ошибка при
сборке в первом случае. Там ведь та же самая циклическая ошибка.
Ну и собственно говоря - а как надо?
Как ни крути но:
имеем ячейка таблицы, в ней input и кнопка. при нажатии на кнопку открывается модальный диалог и в ней таблица, в этой таблице - ячейка........... и импорт (не наследование) крутится по кругу.
рабочее решение в файле с определением __inputSelect ниже определить__inputCombo. Так работает. по другому никак не получается

ksa 08.07.2026 08:49

Цитата:

Сообщение от fxobject
Так вот вопрос - собственно почему не возникает ошибка при
сборке в первом случае. Там ведь та же самая циклическая ошибка.

Сборщик не всегда дает ошибку при зацикливании...

Цитата:

Сообщение от fxobject
Ну и собственно говоря - а как надо?

Убрать зацикливание импорта...

Более подробно расписано вот в этой статье.
https://habr.com/ru/articles/852680/

fxobject 08.07.2026 13:18

как бы прочитал, но собственно природа проблемы - понятна. Т.е. нужен метод (инструмент) для подобного. по предложенной статье, моем случае ситуация немного отличается. т.е. их методика не подходит. Не суть. Нашел два рабочих варианта. И что самое интересное, в одном из вариантов все иморты остались как было (при возникновении ошибки) изменилось только наследование в классе.
т.е. был класс inputCombo extends inputSelect
сделал по другому - inputCombo extends interface
а внутри inputCombo :
<__inputSelect>
<div className={'inputCombo'}>
<select>
{ this.props.select.map((elem,index)=>{
return <option value="index">{elem.displayName}</option>
})}
</select>
</div>
</__inputSelect>)

так даже более правильно стало.
но при этом все import остались на месте и та самая циклическая ссылка она также по идее должна остаться. Но проект собран.
странно
пока не докапаться. но формум в попандосе

Aetae 09.07.2026 01:31

fxobject, для разных сборщиков есть разные circular dependency plugin и т.п, погугли для своего. Они тебе покажут где есть цикл.

Почему заработало с interface? (предположительно, конструкция extends interface не рабочая)
Потому что interface - это typescript, а typescript это надстройка актуальная только во время разработки. Все чисто-типовые импорты исчезнут при компиляции и не создадут циклов в рантайме. Самому же ts циклы не страшны - он держит проект в памяти целиком.


Часовой пояс GMT +3, время: 22:12.