Кажется, каждый раз, когда мне нужно настроить React Router в новом проекте, я сталкиваюсь с чем-то новым, возможно, из-за изменений версии.
Я использую дерево состояний responsejs и mobx (хотя на данный момент ничего из этого не использовал).
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import HomeComponent from './HomeComponent.js';
import {withRouter, Route} from 'react-router'
@withRouter
export default class App extends Component {
render() {
return (
<Route exact path='/' component = {HomeComponent}/>
);
}
}
export default App;
Когда я запускаю его, я получаю
ERROR in ./src/components/App.js
Module build failed: SyntaxError /components/App.js: Unexpected token (6:0)
Я также получил предупреждение
Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option to remove this warning.
Редактировать
По комментарию "Артема Мирченко"
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'mobx-react';
import { useStrict } from 'mobx';
import createBrowserHistory from 'history/createBrowserHistory';
import {syncHistoryWithStore } from 'mobx-react-router';
import { Router } from 'react-router'
import AppContainer from './components/App';
const browserHistory = createBrowserHistory();
import stores from '../src/stores/Stores';
const history = syncHistoryWithStore(browserHistory, stores.routingStore);
ReactDOM.render(
<Provider {... stores}>
<Router history = {history}>
<AppContainer />
</Router>
</Provider>,
document.getElementById('app')
);
import {RouterStore} from 'mobx-react-router';
const routingStore = new RouterStore();
const stores = {
routingStore
}
export default stores;





Вам необходимо установить плагин babel transform-decorators-legacy.
Через пряжу:
yard add --dev transform-decorators-legacy
Соревнуйтесь в npm:
npm install --save-dev transform-decorators-legacy
И добавьте к плагинам ket в своих опциях babel:
{
// pressets ....
"plugins": ["transform-decorators-legacy"]
}
Похоже на ваш код, я думаю, нет необходимости использовать withRouter, вы можете просто использовать BrowserRoter. Вот отличный и простой пример: BrowserRouter
Может быть, я не уверен. Копирую старый проект. В этом проекте я использую историю браузера. Возможно, потому, что я также ссылаюсь на маршрутизатор mobx. также. Я отправлю этот код здесь, а затем решу, заслуживает ли он новых вопросов.
Это нормально, теперь вы можете обернуть свой <AppContainer> в <Router /> и прикрепить к нему историю браузера. Смотрите еще один пример Маршрутизатор
Хорошо, тогда то, что у меня есть, кажется хорошим, я просто смотрю, как сделать так, чтобы, если я скопирую URL-адрес сейчас, он не выдаст мне ошибку "Cannot GET / something /". Я думал, что devServer: {historyApiFallback: true} исправил эту проблему, но, похоже, не работает
Попробуйте добавить publicPath: '/' в раздел output конфигурационного файла webpack, в моем случае это поможет.
Верно, был так уверен, что это проблема с маршрутизацией. Я также сделал "преобразование-класс-свойства". Вы знаете, насколько экспериментален @withRouter? Думаю, я также должен ссылаться на response-router-dom instea для response-router