Как разделить маршруты внутри приложения React

У меня есть следующее на моем index.js

<Router  routes = {routes} />

I would like to have routes section in a separate file, so far I tried this:
routes.js

export default (
    <div>
        <Route path = "/" component = {AppComponent}>
            <Route path = "/someother" component = {AddProductComponent} />
        </Route>

        <Route path = "/products" component = {ListProductComponent} />
    </div>
);

и в index.js

import routes from './routes';
<Router  routes = {routes} />

По какой-то причине приложение теперь отображается пустым. похоже, что маршруты не отображаются.

ОБНОВЛЕНИЕ, это весь мой index.js, за исключением отсутствующего импорта из-за компоновки stackoverflow о слишком большом количестве кода:

const rootReducer = combineReducers({
    products: productReducer,
});

const store = createStore(
    rootReducer,
    applyMiddleware(thunk),
);

ReactDOM.render(
    <Provider store = {store}>
        <Router  routes = {routes} />
    </Provider>
    , document.getElementById('root')
);

Обновить route.js

export default (
    <Switch>
       <Route exact path = "/" component = {AppComponent}/>

        <Route path = "/products" component = {ListProductComponent}>
            <Route path = "/details/:productId" component = {AddProductComponent} />
        </Route>
    </Switch>
);
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
62
1

Ответы 1

Вам не хватает переключателя:

<Switch>
    <Route path = "/someother" component = {AppComponent}>
    <Route path = "/products" component = {ListProductComponent} />
    <Route path = "/" component = {AppComponent}>
</Switch>

Кроме того, ваш код будет отображать только AppComponent, так как любой URL-адрес (/, /home, /etc) начинается с косой черты, которую вы поместили в атрибут path. Вы можете захотеть это как последнюю страницу, запасной вариант.

Атрибут path работает с подстановочным знаком: path = "/" -> path = "/**" функционально одинаковы. Если вам нужен точный путь, добавьте exact в Route.


Если вы хотите разделить маршруты на отдельные файлы, вы можете сделать это:

<Switch>
    <Route path = {"/user"} component = {UserRouter}/>
    <Route path = {"/product"} component = {ProductRouter}/>
</Switch>
// In userRouter.jsx:
export function UserRouter() {
    return <Switch>
        <Route exact path = {"/user/list"} component = {UserListPage}/>
        <Route exact path = {"/user/signup"} component = {userSignupPage}/>
        <Route exact path = {"/user/profile"} component = {UserProfilePage}/>
    </Switch>
};

все еще пустая страница

Mizlul 18.01.2019 14:33

Развернул мой ответ. Если у вас есть пустая страница, скорее всего, у вас есть ошибка.

Martijn 18.01.2019 14:38

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

Mizlul 18.01.2019 14:40

Другие вопросы по теме