反应路由器不更改网址

时间:2017-12-31 18:19:47

标签: javascript reactjs react-router

我是React的新手(1周:P)。我有一个应用程序根据搜索词命中api。从这些结果中,用户能够从结果中收藏项目。当我点击收藏夹的链接时,我会转到正确的组件,并且网址会反映此更改。但是,当我输入一个新的搜索词时,从静态的侧面导航栏中,我会在正确的组件中看到更正信息,但是网址不会改变;它仍然显示backgroundColor 应该 http://localhost:3000/favorites。以下是相关代码,如果您认为需要进一步猜测,请告诉我。 路线:

http://localhost:3000

return( <BrowserRouter > <div className='routes'> <Route path='/' component={App}/> <Route path='/favorites' component={Favorites}/> </div> </BrowserRouter> ) } 组件:

SearchBox

带有链接的return( <form className="search-box" > <input type="text" placeholder="Search.." name="search" autoComplete='off'/> <button className="fa fa-search" type="submit" onClick={this.handleSearch.bind(this)}> </button> </form> ) 组件:

SideNav

我已经看到了很多关于网址更改的信息,但是组件没有渲染。那不是我的问题。然后组件正确呈现,但是网址没有反映出来。

修改

这是SideBar在Home Component中呈现的位置。

return(
  <nav className='naviagtion'>
    <ul className='mainmenu'>
    <div className='img-logout'>
      <img src={this.props.info.image} alt='Avatar' />
      <Logout handleLogout={this.handleLogout.bind(this)}/>
    </div>
    <SearchBox search={this.searchHandler.bind(this)}/>
      <li>
        <a href="/">home</a>
      </li>
      <li>
        <a href="/favorites">favorites</a>
      </li>
      <li>
        <a href="">playlists</a>
          <ul className='submenu'>
          <li>
            <a href="">
              <strong>list of lists</strong>
            </a>
          </li>
          </ul>
      </li>
      <li>
        <a href="">friends</a>
      </li>
    </ul>
  </nav>
)

这是 <div> <SideBar info={this.state.info} logout={this.handleLogout.bind(this)} search={this.handleSearch.bind(this)} /> <Main videos={this.state.videos}/> </div>

App.js

1 个答案:

答案 0 :(得分:1)

可能会有所帮助的一些事情。

1)Route组件进入Switch组件(确保导入)。此外,请务必使用&#34;确切路径&#34; for&#34; /&#34;或者用户不能进入&#34; / favorites&#34;。

return(
  <Switch>
  <div className='routes'>
    <Route exact path='/' component={App}/>
    <Route path='/favorites' component={Favorites}/>
  </div>
  </Switch>
) }

2)BrowserRouter绕过整个应用程序(可能在你的index.js中),看起来应该是这样的:

import React from "react";
import ReactDOM from "react-dom";
import { BrowserRouter } from "react-router-dom" OR "react-router"
import App from "./src/App";

ReactDOM.render(<BrowserRouter><App/></BrowserRouter>, document.getElementById("app"));

3)Route组件可能需要是Switch的直接子级,因此我尝试删除其间的div。当我想出来时,我会调查并更新这个答案。

4)您需要使用Link组件而不是标签来实际链接到您已设置的路线:

import { Link } from "react-router-dom" OR "react-router" //not sure what you're using

...

return(
  <nav className='naviagtion'>
    <ul className='mainmenu'>
    ...
     <li>
       <Link to="/">home</Link>
     </li>
     <li>
       <Link to="/favorites">favorites</Link>
     </li>
   ...
   </ul>