@Ibishka

Почему роут не происходит при динамическом ссылке?

App
<BrowserRouter>
        <header className="header">
          <div className="container">
            <div className="header__row">
              <NavLink to="/">
                <img src={require("./assets/img/logo.svg")} alt="Triangle" />
              </NavLink>
              <nav className="menu hidden">
                <li className="menu__item">
                  <NavLink
                    to="/"
                    className="menu__link"
                    activeClassName="active"
                    exact
                  >
                    Home
                  </NavLink>
                </li>
                <li className="menu__item">
                  <NavLink
                    to="/news"
                    className="menu__link"
                    activeClassName="active"
                  >
                    News
                  </NavLink>
                </li>
                <li className="menu__item">
                  <NavLink
                    to="/musics"
                    className="menu__link"
                    activeClassName="active"
                  >
                    Musics
                  </NavLink>
                </li>
                <li className="menu__item">
                  <NavLink
                    to="/media"
                    className="menu__link"
                    activeClassName="active"
                  >
                    Media
                  </NavLink>
                </li>
              </nav>
              <BgAudio />
              <button
                className="hamburger"
                onClick={() =>
                  this.setState({
                    openDropdown: !this.state.openDropdown
                  })
                }
                style={{
                  background: `url(${require(`./assets/img/${
                    this.openDropdown ? "cross" : "hamburger"
                  }.svg`)}) no-repeat center`
                }}
              ></button>
            </div>
          </div>
        </header>
        {this.state.openDropdown ? (
          <div className="dropdown">
            <nav className="menu">
              <li className="menu__item">
                <NavLink
                  to="/"
                  className="menu__link"
                  activeClassName="active"
                  exact
                >
                  Home
                </NavLink>
              </li>
              <li className="menu__item">
                <NavLink
                  to="/news"
                  className="menu__link"
                  activeClassName="active"
                >
                  News
                </NavLink>
              </li>
              <li className="menu__item">
                <NavLink
                  to="/musics"
                  className="menu__link"
                  activeClassName="active"
                >
                  Musics
                </NavLink>
              </li>
              <li className="menu__item">
                <NavLink
                  to="/media"
                  className="menu__link"
                  activeClassName="active"
                >
                  Media
                </NavLink>
              </li>
            </nav>
          </div>
        ) : null}
        <div className="App">
          <Switch>
            <Route path="/" component={Home} exact />
            <Route path="/news" component={News} />
            <Route path="/news/:id" component={NewsPost} />
          </Switch>
        </div>
        {this.state.showScrollBtn ? <button className="scroll"></button> : null}
      </BrowserRouter>

News
import React from "react";
import { NavLink } from "react-router-dom";

export class News extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      news: null
    };
  }
  componentDidMount() {
    fetch("./db/db.json")
      .then(response => response.json())
      .then(data => {
        this.newsList = data.news;
        this.setState({ news: data.news.slice(0, 10) });
      });
    window.addEventListener("scroll", () => {
      const root = document.documentElement || document.body;
      if (
        root.scrollTop + window.innerHeight === root.offsetHeight &&
        this.state.news.length < this.newsList.length
      )
        this.state.news.push(
          this.newsList.slice(
            this.state.news.length,
            this.state.news.length + 3
          )[0]
        );
    });
  }
  render() {
    return (
      <section className="news">
        <div className="container">
          <ul className="news__list">
            {this.state.news ? (
              this.state.news.map(post => (
                <li className="news__card" key={post.id}>
                  <NavLink to={`/news/${post.id}`} className="news__head fill">
                    <img
                      src={require(`../assets/img/${post.imgSm}`)}
                      className="full-width"
                      alt=""
                    />
                  </NavLink>
                  <NavLink
                    className="news__card-title news__title"
                    to={`/news/${post.id}`}
                  >
                    {post.title}
                  </NavLink>
                  <p className="news__txt">{post.date}</p>
                </li>
              ))
            ) : (
              <p className="loading">Loading...</p>
            )}
          </ul>
        </div>
      </section>
    );
  }
}

NewsPost
import React from "react";
import { NavLink } from "react-router-dom";

export class NewsPost extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      news: null
    };
  }
  componentDidMount() {
    fetch("./db/db.json")
      .then(response => response.json())
      .then(data => {
        this.newsList = data.news;
        this.newsPost = data.news.filter(e => e.id === 1)[0];
        this.setState({
          news: data.news.filter(e => e.id !== 1).slice(0, 10)
        });
      });
    window.addEventListener("scroll", () => {
      const root = document.documentElement || document.body;
      if (
        root.scrollTop + window.innerHeight === root.offsetHeight &&
        this.state.news.length + 1 < this.newsList.length
      )
        this.state.news.push(
          this.newsList.slice(
            this.state.news.length,
            this.state.news.length + 3
          )[0]
        );
    });
  }
  render() {
    return (
      <section className="news">
        <div className="container">
          {this.newsPost ? (
            <ul className="news__post">
              <li className="news__post-part fill">
                <img
                  src={require(`../assets/img/${this.newsPost.img}`)}
                  className="full-width"
                  alt=""
                />
              </li>
              <li className="news__post-part">
                <h2 className="news__title">{this.newsPost.title}</h2>
                <p className="news__desc news__txt">{this.newsPost.desc}</p>
              </li>
            </ul>
          ) : (
            <p className="loading">Loading...</p>
          )}
          <ul className="news__list">
            {this.state.news ? (
              this.state.news.map(post => (
                <li className="news__card" key={post.id}>
                  <NavLink to={`news/${post.id}`} className="news__head fill">
                    <img
                      src={require(`../assets/img/${post.imgSm}`)}
                      className="full-width"
                      alt=""
                    />
                  </NavLink>
                  <NavLink
                    className="news__card-title news__title"
                    to={`/news/${post.id}`}
                  >
                    {post.title}
                  </NavLink>
                  <p className="news__txt">{post.date}</p>
                </li>
              ))
            ) : (
              <p className="loading">Loading...</p>
            )}
          </ul>
        </div>
      </section>
    );
  }
}

Если ссылка такая роут не происходит />
Так работает />
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы