Как правильно динамически изменять информацию, отображаемую на сайте на основе URL? - PullRequest
0 голосов
/ 31 октября 2018

Я новичок в JavaScript и React. Кажется, я застрял в этом вопросе, я нашел информацию, но думаю, что это не то, что я действительно ищу, возможно, кто-то сможет пролить свет на этот вопрос.

Итак, что я действительно ищу, так это способ создания страницы «пресс-формы» приложения «узел / реакция», которая будет отображать изменяющуюся информацию на основе URL-адреса, отправленного пользователем. Скажем, например, посмотрите на Facebook (или даже stackoverflow) одним кликом на профиле друзей 'y', затем URL-адрес изменится на facebook.com/friends-y, и если мы выберем другого человека, он изменится. Таким образом, я считаю, что именно так они должны знать, как заполнить свой шаблон, используя информацию, предоставленную с этого URL, с именами изображений и т. Д.

Я видел, что блог предлагает использовать route , другой предлагает использовать url-запросы, более того (что я не знаю, как прочитать их один раз или как заставить их сказать, скажем например, с событием onChange, когда вы говорите, что нажимаете на что-то внутри страницы).

У меня такой вопрос: полезен ли какой-либо из этих методов, если я объединю их, я видел веб-сайты, которые используют оба, или есть другой отраслевой стандарт, который я не нашел и, возможно, идет с реакцией?

Любое руководство будет высоко ценится.

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

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

npm install --save react-router-dom

и после этого импортируйте Router, Route, Link, Switch (все, что вы хотите) из response-router-dom и укажите маршрут к компоненту внутри тега router .... Я упоминаю ниже в моем коде

import React, { Component } from 'react';
import './App.css';
import Login from './component/login';
import User from './component/user';
import Signup from './component/signup';
import Notfound from './component/notfound';
import { BrowserRouter as Router, Route, Link,  Switch} from "react-router-dom";

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


class App extends Component {
  constructor(props){
    super(props);
    this.state={
      loggedIn : false
    }
  }

  render() {
    return (
      <Router>


      <div className="App">
        <ul className="nav nav-pills">
          <li>
            <Link to="/">Home</Link>
          </li>
          <li>
            <Link to="/login">LogIn</Link>
          </li>
          <li>  
            <Link to="/signup">Sign Up</Link>
          </li>
          <li>
            <Link to="/user">User</Link>
          </li>
          </ul>

        <Switch>
          <Route exact path="/" component={Home} />
          <Route path="/login" component={Login} />
          <Route path="/signup" component={Signup} />
          <Route path="/user" component={User} onEnter={this.requireAuth}/>
          <Route path="*" component={Notfound} />
        </Switch>

      </div>
      </Router> 
    );
  }
}

export default App;

примечание: в моем коде у меня всего 5 компонентов в моем проекте Авторизоваться, Пользователь, Зарегистрироваться, Не обнаружена, Главная

Дополнительную информацию о маршрутизаторе вы можете проверить на этом сайте. https://reacttraining.com/react-router/web/example/basic

0 голосов
/ 31 октября 2018

Способ обработки маршрутизации в React - с помощью React Router .

При такой (виртуальной) маршрутизации существует два основных способа обработки маршрутизации.

1. Первый - это рендеринг различных компонентов при изменении URL-адреса, например, рендеринг компонента <Home/> для "/" и компонента <About/> для "/about".

Пример:

import React, { Component } from 'react';
import { Switch, Route, withRouter } from 'react-router-dom';
import Home from "./pages/Home";
import About from "./pages/About";

class App extends Component {
    render() {
        return (
            <Switch>
                <Route exact path="/" component={ Home }/>
                <Route path="/about" component={ About }/>
            </Switch>
        )
    }
}

export default withRouter(App);

2. Второй случай, который, как я полагаю, конкретно касается вашего вопроса, - это рендеринг одного и того же компонента с разными данными в зависимости от URL-адреса - например, с компонентом <Profile/>, но изменением его данных для "/profiles/1" против "/profiles/2".

Пример:

import React, { Component } from 'react';
import { withRouter } from 'react-router-dom';

class Profile extends Component {
    constructor() {
        super();
        this.state = {
            profileData: {}
        }
    }

    componentDidMount() {
        this.fetchData();
    }

    componentDidUpdate(prevProps) {
        const currentId = this.props.match.params.id;
        const prevId = prevProps.match.params.id;

        if (currentId !== prevId) {
            this.fetchData();
        }
    }

    async fetchData() {
        const profileId = this.props.match.params.id;

        const profileData = await fetch(`http://example.com/api/profiles/${profileId}`);

        this.setState({
            profileData
        });
    }

    render() {
        const { profileData } = this.state;

        return (
            <div>
                <h1>{ profileData.name }</h1>
            </div>
        )
    }
}

export default withRouter(Profile);

Где содержащий родительский компонент <Profile/> имеет <Route/>, который выглядит следующим образом:

<Route path="/profiles/:id" component={ Profile }/>

Что важно, чтобы id был в this.props.match.params.

Обратите внимание, что в приведенном выше примере способ проверки того, какие данные использовать для заполнения представления, заключается в проверке параметра :id в URL. Поскольку информация о URL-адресе передается компоненту <Profile/> в качестве реквизита, мы можем проверить, изменился ли URL-адрес в componentDidUpdate, и получить новые данные в случае изменения.

Наконец, оба они включают в себя небольшую настройку с React Router (в основном это просто упаковка вашего <App/> в <Router/>), но документация должна помочь с этим: https://reacttraining.com/react-router/web/guides/quick-start.

Надеюсь, это поможет.

0 голосов
/ 31 октября 2018
import React , {Component} from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import App from './Components/Home/App'
import Digital from './Components/DigitalStrat/Digital-Strat';
import ServiceLines from './Components/Serviceline/ServiceLines';
import Operations from './Components/OperationTransformation/Operations- 
Transformation';
import WhyUs from './Components/WhyUs/Why-us';
import Mission from './Components/Mission/Mission';
import OurGroup from './Components/OurGroup/OurGroup';
import Team from './Components/Team/Team';
import Projects from './Components/Projects/Projects';
import Research from './Components/Research/Research';
import News from './Components/News/News';
import Locations from './Components/Location/Locations';
import registerServiceWorker from './registerServiceWorker';
import NewsDetails from "./Components/NewsDetails/newsDetails";
import i18n from './js/i18n'
import { sliderArrow } from './js/sliderArrow';
import { menu } from './js/menu';
import {withRouter} from 'react-router';
import Coockies from './Components/Cookies/Cookies';

class ScrollToTop extends Component {
    componentDidUpdate(prevProps) {
      if (this.props.location !== prevProps.location) {
          window.scrollTo(0, 0)
      }
    }
    render() {
        return this.props.children
    }
}

export default withRouter(ScrollToTop);


ReactDOM.render(
  <BrowserRouter>

    <Switch>
    <ScrollToTop>
    <Route exact path = "/" component = {App}  />
    <Route exact path='/index.html' component={App}/>
    <Route exact path='/Digital-Strategies.html' component={Digital} />
    <Route exact path='/Service-Lines.html' component={ServiceLines} />
    <Route exact path='/Operations-Transformation.html' component= 
    {Operations}/>
    <Route exact path='/inside-the-company.html' component={WhyUs}/>
    <Route exact path='/Mission.html' component={Mission}/>
    <Route exact path='/Our-group.html' component={OurGroup}/>
    <Route exact path='/Team.html' component={Team}/>
    <Route exact path='/Projects.html' component={Projects}/>
    <Route exact path ='/Research-Development.html' component = {Research}/>
    <Route exact path='/News.html' component={News}/>
    <Route exact path='/news-details.html/:slug' component={NewsDetails}/>
    <Route exact path='/Locations.html' component={Locations}/>
    <Route exact path='/cookies' component={Coockies} />
    </ScrollToTop>
    </Switch>

  </BrowserRouter>, document.getElementById('root'));
  registerServiceWorker();

Это основной способ маршрутизации проекта. Не стесняйтесь задавать вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...