@Nivaech

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

Есть компонент, отвечающий за рендер товаров в интернет-магазине. Хочу, чтобы компонент был один, и в зависимости от условия выводил нужную информацию. В данном случае пользователь нажал на ссылку категории один - компонент вывел нужную информацию, нажал на категорию два - отобразилась она, и т.д.
Мое решение выглядит как-то так:
function ProductsPage({collections}) {
 return (
            <Route path="/products/type_one" render={() =>   
                <div>
                    <h1>Type One</h1>
                    <div className="products">
                    {
                        collections.category.typeOne.items.map((item) => {
                            return (
                                <ProductCard key={item.id} item={item} />
                            )
                        })
                    }
                    </div>
                </div>
            }/> 

            <Route path="/products/type_two" render={() =>   
                <div>
                    <h1>Type Two</h1>
                    <div className="products">
                    {
                        collections.category.typeTwo.items.map((item) => {
                            return (
                                <ProductCard key={item.id} item={item} />
                            )
                        })
                    }
                    </div>
                </div>
            }/> 
 )
}


Пока у меня только четыре подкатегории - это выглядит довольно безобидно. Но если их будут десятки, то код компонента будет забит подобной бесконечной копипастой. Есть ли более элегантный метод решения задачи?
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
search
@search
мама говорит что я особенный
Сейчас как раз (для души) решаю примерено такую же задачу. Началось всё с того что не нашел в интернете удовлетворительного решения вот таких проблем:

  1. Иерархическая структура страниц
  2. Динамическая навигация
  3. Динамические хлебные крошки (ссылки на верхние страницы в иерархии)
  4. DRY


Вот такой велосипед получился в итоге https://github.com/sneas/react-nested-routes-example

Иерархия навигации задаётся в отдельном конфиге. Где component - это тело страницы.

На данный момент все компоненты, отвечающие за генерацию страниц и построение меню сгружены в App.js.

Общие (динамические) элементы страницы помещаются в компонент Page. Сейчас он рендерит только меню и хлебные крошки, но туда можно, по сути, поместить всё что угодно.

Вот демка: https://sneas.github.io/react-nested-routes-example/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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