В настоящее время я создаю SPA, который можно включить и запустить с любого маршрута.
В настоящее время любой компонент <Link />, который я создаю, перенаправляет клиента обратно в корень домена, в котором он находится, плюс намеченный путь.
В react-router есть свойство для установки начального базового пути; basename.
Кажется, этого нет в preact-router, и я бы действительно не стал переключаться на react-router, поскольку он значительно больше, и я не буду использовать многие из дополнительных функций.
Простой пример маршрутов:
<Router>
<Route
path = "/"
component = {Home}
/>
<Route
path = "/:slug"
component = {Merchant}
/>
</Router>
Я видел пару сообщений в Интернете, подразумевающих, что это возможно, но с такой небольшой документацией немного сложно собрать воедино.
Любая помощь очень ценится.
Спасибо.





Если вам нужна хэш-маршрутизация, вот она: https://github.com/developit/preact-router#custom-history.
Я закончил тем, что обернул preact-router, Link и Router моими собственными компонентами. Оттуда я могу префикс значения свойства path с базовым маршрутом моего приложения, например:
<MyRoute
path = "/"
component = {Home}
/>
Затем где-то в <MyRoute />:
const route = 'my/app/base/path';
let result = (route || '') + this.props.path;
result = result.replace(/([^:]/)/+/g, '$1');
Затем визуализируйте компонент по умолчанию preact-router с результирующим значением <Route path = {result} />.
Ответ jhdevuk указал мне правильное направление.
Следующий класс Router сделает свое дело (это в TypeScript):
class SubfolderRouter extends preactRouter.Router {
render(props: preactRouter.RouterProps, state: any) {
if (state.url.indexOf(MY_FOLDER) == 0) {
state = {
...state,
url: state.url.substr(MY_FOLDER.length),
};
}
return super.render(props, state);
}
}
Если ваше приложение находится в папке const MY_FOLDER = "/myfolder", то этот маршрутизатор проигнорирует папку с URL-адресом. Если пользователь переходит к
/myfolder/home/index
тогда маршрутизатор будет искать URL-адрес /home/index, потому что это фактический маршрут.
Не могли бы вы добавить сюда немного большей ясности? О каком компоненте по умолчанию preact-router вы имеете в виду?