React-router v4, URL-адрес изменяется, но компонент не отображается - PullRequest
0 голосов
/ 23 сентября 2018

Я перепробовал все, но не смог отобразить компонент при изменении URL.Никаких сообщений об ошибках ничего нет, response-redux установлен, но еще не использует его, поэтому это не может быть проблемой.Когда я проверяю его в Google Chrome React dev tools, ничего не происходит, совпадений нет, история против чего-либо.Я не мог найти решение, есть ли способ заставить его работать?

https://codesandbox.io/s/vm3x9n4k67

Вот мой NavBar.js.Я импортирую NavLink из Reaction-router-dom и реализую эти

import React from 'react'
import classes from "./NavBar.css";
import { NavLink } from 'react-router-dom';


const NavBar = (props) => {
    return (
    <div className={classes.NavBar}>
        <h1 className={classes.NavBar_list} >foodbase</h1>
        <ul className={classes.NavBar_list}>

            <NavLink to="/auth"> <li className={classes.NavBar_list_item}>Signin</li></NavLink>
            <NavLink to="/"><li className={classes.NavBar_list_item}>Main Page</li></NavLink>

        </ul>
    </div>
  )
}

export default NavBar

, это мое свойство рендеринга Layout.js:

 render() {
          let recipes = [];
          if (this.state.recipes.length > 0) {
          recipes = this.state.recipes;
    }

    return (

        <div>
            <NavBar/>
            <SearchBox
                onChangeHandler={this.onChangeHandler}
                value={this.state.inputValue}
                onSearchClick={this.onClickedHandler} />
            <section className={classes.SearchSection}>
                <ul className={classes.SearchResultArea}>
                    <SearchResults
                        Results={recipes}
                    ></SearchResults>
                </ul>
            </section>

        </div>
    )
}

и, наконец, app.js:

import React, { Component } from 'react';
import { Switch, Route, BrowserRouter, withRouter } from 'react-router-dom';
import Auth from './components/Auth/Auth';
import SearchBox from './components/SearchBox/SearchBox';
import Layout from './containers/Layout/Layout';
import './App.css';



class App extends Component {
  render() {

  return (
  <div>
    <BrowserRouter>
      <Switch>
        <Layout>
          <Route path="/auth" component={Auth} />
          <Route path="/" exact component={SearchBox} />
        </Layout>
      </Switch>
    </BrowserRouter>
    </div>
    );
  }
}

export default withRouter(App);

when clicked Signin

Main Page

1 Ответ

0 голосов
/ 23 сентября 2018

Я предполагаю, что вам нужно поместить ваши Route компоненты непосредственно в Switch и не забудьте отрендерить children в Layout.Попробуйте это:

app.js:

class App extends Component {
  render() {

  return (
  <div>
    <BrowserRouter>
      <Layout>
        <Switch>
          <Route path="/auth" component={Auth} />
          <Route path="/" exact component={SearchBox} />
        </Switch>
      </Layout>
    </BrowserRouter>
    </div>
    );
  }
}

Layout.js

render() {
  // ...

  return (
    <div>
      <NavBar />
      { this.props.children } // <-- your route specific components
    </div>
  )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...