Хотите более стандартный способ навигации по страницам с помощью Reactjs?

Использование jQuery, как и это (за ним следует решение, которое не использует jQuery, за исключением события, намного меньше вызовов функций, если это важно):

$(".rightArrow").click(function() {
  var rightArrowParents = [];
  $(this).parents().addBack().not('html').each(function() {
    var entry = this.tagName.toLowerCase();
    if (this.className) {
      entry += "." + this.className.replace(/ /g, '.');
    }
    rightArrowParents.push(entry);
  });
  alert(rightArrowParents.join(" "));
  return false;
});

Пример в реальном времени:

$(".rightArrow").click(function() {
  var rightArrowParents = [];
  $(this).parents().addBack().not('html').each(function() {
    var entry = this.tagName.toLowerCase();
    if (this.className) {
      entry += "." + this.className.replace(/ /g, '.');
    }
    rightArrowParents.push(entry);
  });
  alert(rightArrowParents.join(" "));
  return false;
});

(В живых примерах я обновил атрибут class на div как lol multi до продемонстрировать обработку нескольких классов.)

Использует parents , чтобы получить предков элемента, который был нажат, удаляет элемент html из этого через not (с тех пор, как вы начали с body), затем перебирает записи для каждого родителя и нажимает их на массив. Затем мы используем addBack , чтобы добавить a обратно в набор, что также изменяет порядок набора на то, что вы хотели (parents является особенным, он дает вам родителей в обратном порядку, который вы хотели, но затем addBAck возвращает его в порядке DOM). Затем он использует Array#join для создания строки с разделителями.

При создании записи, если в className есть что-либо, мы заменяем пробелы на . для поддержки элементов, которые имеют более одного класса (

имеет className = "foo bar", поэтому запись заканчивается на p.foo.bar).

Просто для полноты, это одно из тех мест, где jQuery может быть излишним, вы можете легко сделать это просто подойдя к DOM:

$(".rightArrow").click(function() {
  var rightArrowParents = [],
    elm,
    entry;

  for (elm = this; elm; elm = elm.parentNode) {
    entry = elm.tagName.toLowerCase();
    if (entry === "html") {
      break;
    }
    if (elm.className) {
      entry += "." + elm.className.replace(/ /g, '.');
    }
    rightArrowParents.push(entry);
  }
  rightArrowParents.reverse();
  alert(rightArrowParents.join(" "));
  return false;
});

Пример в реальном времени:

$(".rightArrow").click(function() {
  var rightArrowParents = [],
    elm,
    entry;

  for (elm = this; elm; elm = elm.parentNode) {
    entry = elm.tagName.toLowerCase();
    if (entry === "html") {
      break;
    }
    if (elm.className) {
      entry += "." + elm.className.replace(/ /g, '.');
    }
    rightArrowParents.push(entry);
  }
  rightArrowParents.reverse();
  alert(rightArrowParents.join(" "));
  return false;
});

Там мы просто используйте стандартное свойство parentNode элемента элемента повторно, чтобы подойти к дереву, пока мы не закончим родительский или не увидим элемент html. Затем мы отменим наш массив (поскольку он отстает от того, что вы хотели), и присоединяйтесь к нему, и мы будем рады.

0
задан Tholle 13 July 2018 в 16:19
поделиться

1 ответ

То, что вы ищете, называется механизмом маршрутизации.

Посмотрите на response-router . Это, вероятно, самый популярный выбор для React (для Интернета).

Вот очень простой пример для примера использования:

То, что вы ищете, называется Механизм маршрутизации.

Взгляните на реактивный маршрутизатор . Это, вероятно, самый популярный выбор для React (для Интернета).

Вот очень простой пример для примера использования:

import React from "react";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";

class App extends Component {
  render() {
    return (
      <Router>
        <div>
          <ul>
            <li>
              <Link to="/">Home</Link>
            </li>
            <li>
              <Link to="/about">About</Link>
            </li>
          </ul>

          <hr />

          <Route exact path="/" component={Home} />
          <Route path="/about" component={About} />
        </div>
      </Router>
    );
  }
);

const Home = () => (
  <div>
    <h2>Home</h2>
  </div>
);

const About = () => (
  <div>
    <h2>About</h2>
  </div>
);
0
ответ дан Kaloyan Kosev 17 August 2018 в 12:26
поделиться
  • 1
    Как я могу использовать его в App.js? – Bilal Kazmi 13 July 2018 в 18:11
  • 2
    Возможно, функциональный компонент, который я использовал, смутил вас. Я только что обновил этот пример с помощью компонента App , как тот, что был в вашем вопросе. Отвечает ли это на ваш вопрос? – Kaloyan Kosev 13 July 2018 в 18:24
  • 3
    Спасибо, получил его... – Bilal Kazmi 13 July 2018 в 20:31
Другие вопросы по тегам:

Похожие вопросы: