有一个具有路由和路由的React应用程序会在刷新时出错,这可能是什么原因?

时间:2019-02-06 10:01:08

标签: reactjs react-router react-router-dom

我的react.js应用程序中有路由属性。当我第一次单击该路由时,它可以正常工作,但是如果我在页面中刷新,则会出现错误,提示无法读取属性... null。我正在从tmdb进行api调用。为什么刷新时出错?其次,除非我提到的第一条路线之外,否则我有另一条路线无法访问。我的意思是,当我将TvInfo放在MovieInfo tvinfo之上时,电影信息却不起作用。这样,只有movieinfo起作用。如果我先单击上面的route元素,然后单击tvinfo元素,我将再次在屏幕上获得上次单击的电影。我尝试过很多事情可能是什么问题?谢谢

val a = listOf("abc", "a", "bb", "aa", "aaa", "bb", "a")
val b = a.sortedWith(compareBy({ it.length }, { it }))
println(b)

2 个答案:

答案 0 :(得分:0)

您需要对Routes进行一些不同的设计,Route组件无法区分两个单独的参数。

class App extends Component {
    render(){
        return(
          <BrowserRouter>
            <Switch>
              <Route exact path="/" component={Home} />
              <Route path="movie/:movie_id" component={MovieInfo} />
              <Route path="tv/:tv_id" component={TvInfo} />
            </Switch>
          </BrowserRouter>
        )
    }
}

export default App;

答案 1 :(得分:0)

这是我的movieInfo组件

class MovieInfo extends React.Component{

 render(){


 return(
  <div>
    <p style={{marginLeft:'47%',fontSize:25}}>{this.props.selectedMovie.original_title}</p>
    <img  style={{marginLeft: '20%'}}
    src={`http://image.tmdb.org/t/p/w780${this.props.selectedMovie.backdrop_path}`} alt="moviebackdrop"/>
  <div style={{float:'right',marginRight:45}}>
    <p>Release Date: {this.props.selectedMovie.release_date}</p>
    <p>Vote: {this.props.selectedMovie.vote_average}<Icon name="star" color="yellow" /></p>
  </div>
    <p style={{width:800,marginLeft: '20%'}} >{this.props.selectedMovie.overview}</p>
    <p>{this.props.data.homepage}</p>
  </div>
)}
}

const mapStateToProps = (state) => {
return{
selectedMovie:state.movie.selectedMovie,
 }
}

为了能够显示此屏幕,我还有另一个组件可以在其中显示电影的图像。当我单击图像时,它将呈现movieInfo组件。 这是我的图像组件。

 selectMovie = () => {
 this.props.setMovie(this.props.movie)
 }


render(){
return(
<Link to={"movie/" + this.props.movie.id}>
  <div onClick={() => this.selectMovie()}>
    <div className="item">
      <img className="img"
      src={`http://image.tmdb.org/t/p/w342${this.props.movie.backdrop_path}`} alt="moviebackdrop"/>
      <p className="title">{this.props.movie.original_title}</p>
      <p className="overview">{this.props.movie.overview}</p>
    </div>
  </div>
</Link>
)}
}