Почему я не могу разделить <Switch> на другой модуль?

Цель

Я пытаюсь извлечь <Switch> с выходом <Route> в другой модуль.

Проблема

URL-адрес изменяется на новый путь, а содержимое - нет (только когда я обновляю его, изменяется).

Я пытаюсь понять, что мне не хватает.

ИЗМЕНИТЬ:живой пример:https://stackblitz.com/edit/separated-switch-module

рабочий пример:

<BrowserRouter>
  <div>
    <Link to = "/"> Home </Link>
    <Link to = "contacts"> Contacts </Link>

    <Switch>
      <Route exact path = "/" component = {Home} />
      <Route path = "/contacts" component = {Contacts} />
    </Switch>
  </div>
</BrowserRouter>

неудачный пример:

<BrowserRouter>
  <div>
    <Link to = "/"> Home </Link>
    <Link to = "contacts"> Contacts </Link>
    <SwitchedRoutes/>
  </div>
</BrowserRouter>

ИЗМЕНИТЬ:

SwitchedRoutes:

import React from "react";
import { observer, inject } from "mobx-react";
import { Switch, Route } from "react-router-dom";

@inject('pageStore')
@observer
export default class extends React.Component {
    render(){   
        const {
            home,
            contacts
        } = this.props.pageStore.pages;

        return (
            <Switch>
                <Route exact path = {home.path} render = {()=> <Home />} />
                <Route path = {contacts.path} render = {()=> <Contacts/>} />
            </Switch>
        )
    }
}

вы можете показать компонент SwitchedRoutes?

Dusan Jovanov 25.04.2018 17:46

Привет, я обновил пост с помощью компонента SwitchedRoutes

ueeieiie 25.04.2018 17:59

Вы импортировали Route в свой файл SwitchedRoutes?

Colin Ricardo 25.04.2018 18:06

Да, извините, здесь его не было во фрагменте, но я исправил

ueeieiie 25.04.2018 18:07

Я не вижу причин, по которым это не сработает. Можете сделать пример здесь?

Colin Ricardo 25.04.2018 18:15

покажите, как вы его импортируете, где вы используете <SwitchedRoutes />

Omar 25.04.2018 18:45

в чем ошибка? Я полагаю Cant use <Switch> oustide of <Router>?

Milos Mosovsky 25.04.2018 18:49

@Colin здесь: stackblitz.com/edit/separated-switch-module

ueeieiie 25.04.2018 18:51

@Omar вот живой пример: stackblitz.com/edit/separated-switch-module

ueeieiie 25.04.2018 18:55

@MilosMosovsky у меня ошибок нет, вот живой пример: stackblitz.com/edit/separated-switch-module

ueeieiie 25.04.2018 18:55
Здесь вы идете, исправили вашу проблему.
Colin Ricardo 25.04.2018 19:00
Поведение ключевого слова "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) для оценки ваших знаний,...
1
11
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку react-router v4 немного изменил API, вам необходимо предоставить всем базовым компонентам, таким как Switch, Link и т. д., Контекст маршрутизатора. (Что-то вроде подписчика на маршрутизацию), как только вы отключаете модуль от отдельного файла, он теряет контекст.

просто добавьте это в SwitchedRoutes.js

import React from 'react';
import { withRouter } from 'react-router'
import {Switch, Route} from 'react-router-dom';
import {inject, observer} from 'mobx-react';

const Home = () => <h1>Home</h1>;
const Contacts = () => <h1>Contents</h1>;


const switchedRouter = inject('store')(observer(props => {
  const {home, contacts} = props.store.routes;

  return(
    <Switch>
      <Route exact path = {home.path} component = {Home}/>
      <Route path = {contacts.path} component = {Contacts}/>
    </Switch>
  );
}));

export default withRouter(switchedRouter)

мы просто обернули компонент withRouter HoC, который предоставляет нам правильный контекст реактивного маршрутизатора.

https://separated-switch-module-j92psu.stackblitz.io

Черт, добрался до меня. В любом случае исправьте здесь.

Colin Ricardo 25.04.2018 19:01

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