Ответ 1
Архитектура изменилась в response-router v4, а this.context.router.isActive
больше не поддерживается.
В response-router-v4 вы можете вместо использования NavLink использовать открытый NavLink
компонент.
NavLink
Специальная версия, которая добавит атрибуты стиля в отображаемый элемент, когда он соответствует текущему URL-адресу.
import { NavLink } from 'react-router-dom' <NavLink to="/about">About</NavLink>
Он также предоставляет вам поддержку activeClassName:
activeClassName: строка
Класс, задающий элемент, когда он активен. Значение по умолчанию класс активен. Это будет объединено с именем className.
<NavLink to="/faq" activeClassName="selected" >FAQs</NavLink>
Почему this.context.router.isActive не поддерживается:
Вот выдержка из github проблема
Рендеринг <Route>
не обязательно означает "только рендеринг при совпадении текущего местоположения". Например, его можно использовать, вставляя переменные маршрутизатора из контекста в компонент в качестве реквизита.
В <NavLink>
, <Route>
использует дочернюю опору, что означает, что она вызовет функцию children, соответствует ли маршрут. Если совпадение равно NULL, то мы знаем, что оно не соответствует.
Если вы предпочитаете не использовать <Route children>
таким образом, React Router предлагает императивный подход с функцией matchPath
. Это то, что <Switch>es
и <Route>s
используют внутренне для сопоставления местоположения с контуром.
Если ваш компонент не получает реквизиты Router
, вы можете ввести его с помощью withRouter
HOC
import { withRouter } from 'react-router';
export class withRouter(MyComponent);