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

Всем привет!Подскажите, как лучше сделать динамический рендеринг однотипных компонентов(контроллов) по

условию.
Например, есть у меня вышестоящий компонент. Если он имеет значение "A", то нужно отрендерить один набор компонентов, Если значение "B", то другой набор.Эти наборы я описываю в объекте, а потом при переборе в разметке описываю условия, какие именно компоненты рендерить.
Насколько этот метод хорош по вашему мнению? Какие есть практики, структуры данных, как это можно сделать нагляднее?

63 ответов

43 просмотра

напиши отдельный функциональный компонент в котором с помощью switch case возвращай нужный элемент

Pavel- Автор вопроса
Nusret Cavalkada
напиши отдельный функциональный компонент в которо...

В имеете ввиду внутри map определить один функциональный компонент, который внутри будет за счет конструкции switch case возвращать нужный компонент?

да, у тебя .map будет возвращать Компонент

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

компонентов очень много, в том и дело.

Pavel
компонентов очень много, в том и дело.

тогда обратил бы внимание на различие этих компонентов между собой

Pavel- Автор вопроса
Nusret Cavalkada
да, у тебя .map будет возвращать Компонент

Да, идея понятна. Но принципиальной разницы делать это с помощью if else или swtich case - внутри отдельного компонента или все вместе, нет. С точки зрения наглядности да, согласен!

Pavel- Автор вопроса
Pavel
Да, идея понятна. Но принципиальной разницы делать...

кек) у тебя реакт при каждом ререндере будет мемоизировать вычисляемое значение того, что рендерить, так что разница есть и в том как оно будет работать и в том насколько аккуратно будет выглядеть JSX

Pavel
что вы имеете в виду?

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

Makcim Mikulich
если их отличие будет в том что от типа компонента...

условный оператор здесь будет выглядеть как говно, если вариантов > 2х

Очень много лишних конструкций и спор выше не о чем. Можно динамически задавать Element и давать ему от TS дженерика пропсы, лучшее решение проблемы.

.
Очень много лишних конструкций и спор выше не о че...

код написан на JS -> "да надо просто взять другой язык"

.
И что в сущности ты сказал?

надо найти в JS дженерики, потому что TS'а нет

TS — это основа, к тому же в такой ситуации помогает не выстрелить себе в ногу. Можно взять от React типы и передать элементы в пропсы, очень удобно во всех отношениях. Ну не хочешь нормального совета — не слушай и проигнорируй.

.
чего?

выбор языка на проекте это не то на что может повлиять джун)

.
Странно, что кто-то пишет без TS'а

о удивительным мир.... а тебе не странно почему вообще используется JS на фронте а не Java?

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

Не очень понимаю. TS это про типизацию, а мы про манипулирование данными говорим. Если можно, краткий пример?

Pavel
Не очень понимаю. TS это про типизацию, а мы про м...

Парень, вот тебе обязательно нужен объект для этой задачи? Или ты таким образом передать все данные хочешь?

Pavel- Автор вопроса
.
Парень, вот тебе обязательно нужен объект для этой...

Мне нужно определить какие данные нужно отрисовать по условию. Не обязательно объект. Но как еще можно можно сделать не представляю.

Pavel
Мне нужно определить какие данные нужно отрисовать...

если у тебя много условий, а не просто по типу switch, То делай if с ранним return.

Pavel
Мне нужно определить какие данные нужно отрисовать...

Вот! А почему бы тебе не рендерить html по тому, что тебе приходить в пропсы?

Pavel- Автор вопроса
.
Вот! А почему бы тебе не рендерить html по тому, ч...

Я мог бы заготовить каждый template под каждое условие. Просто условий слишком много. И это такой громоздкий вариант. И такое количество кода скажется на объеме итогового бандла.

Pavel- Автор вопроса
.
Ты с ТС минимально знаком?

Знаком. Но причем тут ТС, который работает поверх JS только в редакторе кода. Какую роль он сыграет в данных?

Pavel
Знаком. Но причем тут ТС, который работает поверх ...

никакой не сыграет, просто поможет ошибок избежать

Pavel- Автор вопроса
Vyacheslav Гайсин
лучше заготовить отдельно

Чем лучше? JSX, что так, что эдак скомпилируется.

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

разделишь разные варианты реализации на отдельный компонент. Будет точно меньше путаницы.

Pavel- Автор вопроса
Vyacheslav Гайсин
разделишь разные варианты реализации на отдельный ...

Да путаницы собственно никакой и нет. Есть объект, который описывает структуру рендеринга. Нужно лишь пройтись по нему и отрисовать то, что нужно.

Pavel
Знаком. Но причем тут ТС, который работает поверх ...

Смотри, ты можешь рендерить семантику от пропса, который будет твоим корневым элементом, тебе не нужны будут условия и тот объект, который ты написал. по React.ComponentProps<"input")> ты берешь сразу все типы своего элемента из пропса, спредишь его в свой html тег {...props} и когда ты его используешь где-то на странице — ты от типов, которые ты взял можешь дать ему уже выше placeholder, value, onChange и так далее. Ты сейчас изобретаешь велосипед, который разорвёт твой бандл.

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

Можно хотя бы минимальный пример? Не совсем понимаю из текста, как это можно реализовать.

.
Смотри, ты можешь рендерить семантику от пропса, к...

мне тоже непонятно было бы круто увидеть пример

Vyacheslav Гайсин
мне тоже непонятно было бы круто увидеть пример

Так ты уже у нас всё знаешь, чего мне тебя учить?) Я у тебя учиться должен)

.
Так ты уже у нас всё знаешь, чего мне тебя учить?)...

ты из чего такой вывод сделал? ты непонятно обьясняешь, тебя попросили показать пример

Vyacheslav Гайсин
ты из чего такой вывод сделал? ты непонятно обьясн...

Как мне тебе что-то попытаться объяснить, если ты не слушаешь и не пытаешься вникнуть? Ты сам для себя плодишь вопросы, когда ты слишком не понимаешь то, о чем ты говоришь

.
Как мне тебе что-то попытаться объяснить, если ты ...

я понимаю о чем говорю. Тебе следует пояснее выражаться, чтобы не плодились вопросы.

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

Что-то вроде этого?

Pavel
Что-то вроде этого?

Да, только тут типы не задаются динамически от входящих параметров.

.
Да, только тут типы не задаются динамически от вхо...

а для чего здесь динамически задавать типы? просто обычный вопрос если что

Vyacheslav Гайсин
а для чего здесь динамически задавать типы? просто...

Будет у тебя один html тег, а типы от него под другой и переиспользуемость никакая?

.
Будет у тебя один html тег, а типы от него под дру...

вместе с используемым компонентом ты можешь импортировать интерфейс пропсов

Vyacheslav Гайсин
вместе с используемым компонентом ты можешь импорт...

У него разные теги button | div, там нужно чтобы от тега шли типы, поэтому так не выйдет задавать тип статически

.
У него разные теги button | div, там нужно чтобы о...

У тебя же все равно они будут статическими?!

.
У него разные теги button | div, там нужно чтобы о...

он может описать локально для компонентов Button, Input типы пропсов, и импортировать их для создания модели пропсов собственно

.
У него разные теги button | div, там нужно чтобы о...

дк а зачем это делать? если тебе все равно нужно рендерить разный JSX в зависимости от какого-то условия в рантайме?

Vyacheslav Гайсин
он может описать локально для компонентов Button, ...

Я же тебе написал выше, что у него 1 компонент и этот 1 компонент нужно сделать максимально переиспользуемым, там не выйдет статически задать типы

.
Я же тебе написал выше, что у него 1 компонент и э...

У компонента свои типы и когда создаешь структуру, то и описываешь в соответствии с типами

.
описываешь что?

структуру данных с которыми нужно будет работать

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Есть ли смысл устраиваться на 1с ? Даст это плюс в дальнейшем трудоустройстве на php? Просто у меня в городе вакансий на пхп нету. Или лучше удаленно искать. Опыта работы нету...
Azamat
14
а где есть mysql cloud кроме яндекс-клауд?
Oleg Nosov
13
hi im a cs student. i need some advice from people who have enough experience in Embedded Software. I need to know whether this profession is suitable for me. I have watched s...
Sahand 🏔️
8
Не ну фпц - это уже просто троллинг какой-то. Элементарный код нельзя собрать. ЧЯДНТ? program Project1; {$mode delphi} uses SysUtils, Classes, Generics.Collections; var...
Peter
4
вот что получается в интерпрететоре, работает и результаты выгляд разумными, но то как выглядит код мне не нравиться, а понять куда двигаться не очень могу, если кому не лень ...
Fedor
42
Карта сайта