2017-01-25 2 views
0

в систему реагировать-маршрутизатор 4.0.0.alpha6, я хочу, чтобы достичь этого:Частичное Перенаправление в React-маршрутизатор 4.0.0.alpha6

site.com/en -> site.com 
site.com/en/hi -> site.com/hi 
site.com/en/hi/there -> site.com/hi/there 

Как будет идти об этом? Я много пробовал из документов, но не могу заставить его работать с грустью ...

Спасибо вам за чтение!

+0

Вы хотите перенаправить URL-адреса? или визуализировать разные компоненты? Не могли бы вы опубликовать то, что вы пробовали? Возможно, это объяснит, что вы хотите сделать немного больше. – azium

ответ

1

Примечание: Пока вы упоминаете v4 alpha, я собираюсь использовать бета-код (неизданный, но доступный через ветвь v4 в репо).

По существу, вы должны определить любой pathname, который начинается с сегмента en, разбивает его на остальные сегменты URL и перенаправляет на все остальное pathname.

В качестве регулярного выражения вы можете сопоставить это с /^\/en(\/.*)?$/. React Router использует path-to-regexp для сопоставления имен путей, которые поддерживают регулярные выражения, но React Router не работает (по крайней мере, не напрямую). Тем не менее, вы можете настроить путь, который будет соответствовать этому, используя неназванные параметры.

<Route path='/en(/*)' component={EnRedirect} /> 

Это должно соответствовать /en, /en и /en/hi, но не /english. Затем в компоненте вам нужно разбить согласованный url на сегменты, удалить en, вернуться в сегменты и перенаправить.

const EnRedirect = ({ match }) => { 
    const parts = match.url.split('/') 
    parts.splice(1,1) 
    const to = parts.join('/') 
    return <Redirect to={to} /> 
} 
+0

Спасибо за ваш ответ! Не могли бы вы сообщить мне номер фиксации версии ветки # v4, которую вы используете, поскольку я не могу найти фиксацию, которая будет установлена. –

+0

Если вы пытаетесь установить с помощью NPM, это пока не сработает. Вам понадобится «git clone» React Router, проверьте ветвь 'v4', перейдите в каталог' packages/react-router' (React Router был преобразован в несколько пакетов: 'response-router',' response-router ' -dom' и 'response-router-native'),' npm link' пакет, затем перейдите к вашему проекту и 'npm link response-router'. Это намного больше шагов, чем «npm install response-router @ next», но пока бета-версия не будет выпущена, вам нужно будет сделать, чтобы использовать бета-код в вашем проекте. –

+1

Сказав это, я думаю, что вы можете заставить это работать в альфе, изменив «Route» на «Match», «path» на «pattern» и 'match.url' на' match.pathname'. –

Смежные вопросы