React-router в расширении CEP (например, Premiere Pro)

я пытаюсь использовать реактивный маршрутизатор в расширении CEP. моя маршрутизация выглядит так:

let prefix = decodeURIComponent(window.location.pathname).replace("index.html", "")

  <Router>
      <Switch>
        <Route exact path = {prefix + "index.html"} component = {MainComponent} />
        <Route path = {prefix + "other/:otherId"} component = {OtherComponent} />
      </Switch>
  </Router>

Кажется, это единственный способ обмануть маршрутизатор, чтобы он принял местоположение расширения, поскольку у него есть document.location «file://path/to/cep/extention/index.html». Проблема, с которой я столкнулся сейчас, заключается в том, что это работает только на Mac, но постоянно не соответствует ни одному пути в Windows. Я подозреваю, что это связано с тем, что расположение в Windows выглядит так: «file:///C:/Program%20Files%20(x86)/Common%20Files/…be/CEP/extensions/extension-name/index.html» и 'C:' смущает маршрутизатор?

Есть ли способ обмануть маршрутизатор, чтобы он принял такой URI местоположения?

поэтому я смог обойти маршрут, никогда не совпадающий с путем MainComponent, просто полностью отбросив элемент «путь». Остается вопрос: как мне получить соответствующий относительный путь «otherComponent»?

light_303 17.04.2019 13:37
Поведение ключевого слова "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
1
161
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Простое решение — используйте HashRouter вместо BrowserRouter. Это также позволяет использовать обычные пути:

import { Route, HashRouter as Router, Switch } from 'react-router-dom'
<Router >
  <Switch>
    <Route exact path = "/" component = {MainComponent} />
    <Route path = "/other/:otherId" component = {OtherComponent} />
  </Switch>
</Router>

Если вы используете Redux, это можно решить с помощью createHashHistory. Так же, как и принятый ответ, это позволяет вам использовать обычные пути. Вот как может выглядеть настройка вашего хранилища избыточности.

import { createStore, applyMiddleware } from 'redux';
import rootReducer from '../reducers/index';
import { createHashHistory } from 'history';
import { routerMiddleware } from 'connected-react-router';

const history = createHashHistory();
const routeMiddleware = routerMiddleware(history);
const middlewares = [routeMiddleware];

const configureStore = (initialState) => {
    return createStore(
        rootReducer(history),
        initialState,
        applyMiddleware(...middlewares)
    );
}

const store = configureStore({});

export default store;

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