简体   繁体   English

如何使用 switch 或 if else 语句导航到 reactjs 中的另一个页面?

[英]How to navigate to another page in reactjs using switch or if else statement?

I am trying to perform a task where a user types in a word in the search box, and if the search box is empty or null show error, and navigate to the respective path, else show the result and navigate to the respective path.我正在尝试执行用户在搜索框中输入单词的任务,如果搜索框为空或 null 显示错误,则导航到相应的路径,否则显示结果并导航到相应的路径。

Please see the code below i tried,请看下面我试过的代码,

    const handleKeyPress = (event) => {
    if( window.location.pathname === "/movies" && event.key === 'Enter' && searchText !== '')
    {
       history.push('/movies')
    }
    else  if( window.location.pathname === "/tvshows" && event.key === 'Enter' && searchText !== '')
    {
       history.push('/tvshows')
    }
   else if(searchText === '' && event.key === 'Enter'){
       alert ("Please enter text to search")
   }
}
const handleClick = (event) =>{
    if (searchText === '')
    {
        alert("Please enter text to search")
    }
    else if (window.location.pathname === "/movies"  && searchText !== '')
    {
        goToMovies()
    }
    else if (window.location.pathname === "/tvshows" && searchText !== '')
    {
        goTotvshows()
    }
}

The code on tvshow page or component tvshow 页面或组件上的代码

  const tfilterData = ((val) => {
    if (props.searchText === "" ) {
        return val
    } 
    else if (val.title?.toLowerCase().includes(props.searchText?.toLowerCase())) {
        return val
    } 
    
} );

{ tvData.length === 0 ? <NotFound notfound = "noResultText" /> : tvData.filter(tfilterData).map((tvshows) =>{
      return(
          <Card className={classes.cardMain}  key={tvshows.id}>
      <CardActionArea>
          <CardMedia className = {classes.cardImage}>
              <img style = {{width: '100%', height: '100%', objectFit: 'cover'}} 
                  src ={`https://image.tmdb.org/t/p/original/${tvshows.poster_path}`} 
                  alt = "tv poster"/>
          </CardMedia>
          <CardContent className = {classes.cardContent}>
              <Tooltip title = {tvshows.name} placement="top">
              <Typography className = {classes.movieTitle}>  {tvshows.name} </Typography>
              </Tooltip>
              <Typography 
                          className = {classes.typography1} 
                          variant="body2" 
                          component = "p"
                  > {tvshows.first_air_date} 
                  </Typography>
              <Rating 
                      className = {classes.typography2} 
                      name = "ratings"
                      value =  {tvshows.vote_average/2} 
                      precision={0.5}
                      readOnly                                
              />                             
          </CardContent>
      </CardActionArea>
      <CardActions style = {{justifyContent: 'space-evenly'}} >
          <Button className = {classes.cardButton} size = "small">Watch</Button>
          <Button className = {classes.cardButton} size = "small" >Share</Button>
          <Button className = {classes.cardButton}size = "small" onClick = {   ()=> addToWatchlist(tvshows) }> Add </Button> 
      </CardActions>                   
  </Card>
      );                    
  })}            
  </div>

the code on the movie page/component电影页面/组件上的代码

  const filterData = ((val) => {
    if (props.searchText === "" ) {
        return val
    } 
    else if (val.title?.toLowerCase().includes(props.searchText?.toLowerCase())) {
        return val
    } 
    
} );

 <Grid
            item
            xs
            container
            direction="column"
            justifyContent="flex-start"
            alignItems="flex-start"
            style={{ backgroundColor: "black", width: "100%", height: "100%"}}
        >
            <div className={classes.filtermain}>
                <div className={classes.filterinner1}>
                    <Button className={classes.frecentlyadded}>Recently Added </Button>
                    <Button className={classes.fmostpopular}>Most Popular</Button>
                </div>
                <div className={classes.filterinner2}>
                    <Button className={classes.fyear}>Year</Button>
                    <Button className={classes.fgenre}>Genre</Button>
                    <Button className={classes.flanguage}>Language</Button>
                    <Button className={classes.fsortby}>Sort by</Button>
                </div>
            </div>
           
            <div  className ={classes.Main} > 
            { movieData.length === 0 ? <NotFound notfound = {noResultText} /> : movieData.filter(filterData).map((movie) =>{
                return(
                    <Card className={classes.cardMain}  key={movie.id}>
                <CardActionArea>
                    <CardMedia className = {classes.cardImage}>
                        <img style = {{width: '100%', height: '100%', objectFit: 'cover'}} 
                            src ={`https://image.tmdb.org/t/p/original/${movie.poster_path}`} 
                            alt = "movie poster"/>
                    </CardMedia>
                    <CardContent className = {classes.cardContent}>
                        <Tooltip title = {movie.title} placement="top">
                        <Typography className = {classes.movieTitle}>  {movie.title} </Typography>
                        </Tooltip>
                        <Typography 
                                    className = {classes.typography1} 
                                    variant="body2" 
                                    component = "p"
                            > {movie.release_date} 
                            </Typography>
                        <Rating 
                                className = {classes.typography2} 
                                name = "ratings"
                                value =  {movie.vote_average/2} 
                                precision={0.5}
                                readOnly                                
                        />                             
                    </CardContent>
                </CardActionArea>
                <CardActions style = {{justifyContent: 'space-evenly'}} >
                    <Button className = {classes.cardButton} size = "small">Watch</Button>
                    <Button className = {classes.cardButton} size = "small" >Share</Button>
                    <Button className = {classes.cardButton}size = "small" onClick = {   ()=> addToWatchlist(movie) }> Add </Button> 
                </CardActions>                   
            </Card>
                );                    
            })}            
            </div>
        </Grid> 

The Error错误在此处输入图像描述

any help is much appreciated.任何帮助深表感谢。 I tried this but it shows an error message and the app gets crashed.我试过这个,但它显示一条错误消息并且应用程序崩溃了。

Thanks for the help,谢谢您的帮助,

So I found the answer, the error was that it had the same naming convention for the API or object I was using, and I found on the internet that dom renders the first or the last value which it will get , and if they both are same it will through such error.所以我找到了答案,错误是它与我正在使用的 API 或 object 具有相同的命名约定,并且我在互联网上发现 dom 呈现它将获得的第一个或最后一个值,如果它们都是同样它会通过这样的错误。

Thanks谢谢

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM