зацикливание импорта
кароч! имеем задачу на 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. Так работает. по другому никак не получается |
Цитата:
Цитата:
Более подробно расписано вот в этой статье. https://habr.com/ru/articles/852680/ |
как бы прочитал, но собственно природа проблемы - понятна. Т.е. нужен метод (инструмент) для подобного. по предложенной статье, моем случае ситуация немного отличается. т.е. их методика не подходит. Не суть. Нашел два рабочих варианта. И что самое интересное, в одном из вариантов все иморты остались как было (при возникновении ошибки) изменилось только наследование в классе.
т.е. был класс 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 остались на месте и та самая циклическая ссылка она также по идее должна остаться. Но проект собран. странно пока не докапаться. но формум в попандосе |
fxobject, для разных сборщиков есть разные circular dependency plugin и т.п, погугли для своего. Они тебе покажут где есть цикл.
Почему заработало с interface? (предположительно, конструкция extends interface не рабочая) Потому что interface - это typescript, а typescript это надстройка актуальная только во время разработки. Все чисто-типовые импорты исчезнут при компиляции и не создадут циклов в рантайме. Самому же ts циклы не страшны - он держит проект в памяти целиком. |
| Часовой пояс GMT +3, время: 22:12. |