React Router - NavLink activeStyle или activeClassName не работает для вложенных маршрутов

Я использую react-router-dom, В моем коде NavLink не применяется activeStyle или же activeClassName даже на странице загрузки / перезагрузки. Я вложил маршруты, но не использовал избыточность.

Пример кода: Stackblitz

Версия response-router-dom: 4.3.1

index.js:

  render() {
    return (
      <div>
        <Router>
          <Hello>
            <Route path="/child-a" component={ChildA} />
            <Route path="/child-b" component={ChildB} />
          </Hello>
        </Router>
      </div>
    );
  }

hello.js:

  render() {
    return (
      <div>
        <h5>
          <NavLink
            to="child-a"
            activeStyle={{ color:'red' }}
            exact
          >child-a</NavLink>
        </h5>
        <h5>
          <NavLink
            to="child-b"
            activeStyle={{ color:'red' }}
            exact
          >child-b</NavLink>
        </h5>
        <div>
          <div><h2>Hello</h2></div>
          {this.props.children}
        </div>
      </div>
    );
  }

2 ответа

Решение

Попробуйте поставить косую черту перед to имущество.

Изменение hello.js на:

render() {
    return (
      <div>
        <h5>
          <NavLink
            to="/child-a"
            activeStyle={{ color:'red' }}
            exact
          >child-a</NavLink>
        </h5>
        <h5>
          <NavLink
            to="/child-b"
            activeStyle={{ color:'red' }}
            exact
          >child-b</NavLink>
        </h5>
        <div>
          <div><h2>Hello</h2></div>
          {this.props.children}
        </div>
      </div>
    );
  }

Кажется, работает на меня!

NavLink activeStyleне работает для вложенных маршрутов. Поскольку вы используете react-router-dom, есть еще одно свойство history которым вы пользуетесь.

React RouterДокументация по

Объекты истории обычно имеют следующие свойства и методы: местоположение - (объект) текущее местоположение. Может иметь следующие свойства: pathname - (строка) Путь к URL-адресу.

hello.js:

      import { Link, withRouter } from "react-router-dom";

const activeTab = (history, path) => {
  if (history.location.pathname === path) {
    return { color: "red" };
  }
};

const Hello= ({ history }) => {
render() {
    return (
      <div>
        <h5>
          <Link
            to="/child-a"
            style={activeTab(history, "/child-a")}
            exact
          >child-a</Link>
        </h5>
        <h5>
          <Link
            to="/child-b"
            style={activeTab(history, "/child-b")}
            exact
          >child-b</Link>
        </h5>
        <div>
          <div><h2>Hello</h2></div>
          {this.props.children}
        </div>
      </div>
    );
  }
}
export default withRouter(Hello);
Другие вопросы по тегам