首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >React路由器嵌套,一旦有参数就打开新页面

React路由器嵌套,一旦有参数就打开新页面
EN

Stack Overflow用户
提问于 2020-01-10 20:14:33
回答 2查看 348关注 0票数 1

目前正在使用create-react-app构建,我正在尝试获得动态路由。我有一个网站有3个页面:手风琴,电影,MovieDetail。

Page Movie是一个包含从swapi获取的电影列表的页面。它的目标是只要你点击一个电影标题,就会打开一个新的页面。新页面将为您提供有关所单击电影的更多信息。

问题是: MovieDetail页面将在同一电影页面上呈现信息。不是在新的页面上..

代码: Index.tsx

代码语言:javascript
运行
复制
const routing = (
    <Router>
        <div>
            <nav>
                <ul>
                    <li>
                        <Link to="/">Home</Link>
                    </li>
                    <li>
                        <Link to="/movies">Movies</Link>
                    </li>
                </ul>
            </nav>

            <Switch>
            <Route exact={true} path="/" component={App} />
            <Route path="/movies" component={Movies} />
            <Route exact={true} path="/movies/:id" component={MovieDetail} />
            <Route component={NotFound} />
            </Switch>
        </div>
    </Router>
);

ReactDOM.render(routing, document.getElementById('root'));

Movies.tsx:

代码语言:javascript
运行
复制
import React from 'react';
import { Route, useParams, Link, Switch } from 'react-router-dom';
import { useMovies } from './api/useMovies';
import { MovieDetail } from './MovieDetail';

export const Movies = () => {
    let { id } = useParams();
    const movies = useMovies();

    return (
        <div>
            <h1>Movies</h1>
            <h2>Selected movie: {id}</h2>
            <h2>Select a movie:</h2>
            {movies &&
                (
                    <ul>
                        {console.log(movies)}
                        {movies.results.map((movie, index) => {
                            return (
                                <li key={index}>
                                    <Link to={`/movies/${index + 1}`}>{movie.title}</Link>
                                </li>
                            );
                        })
                        }
                    </ul>
                )
            }
            <Switch>
                <Route path="/movies/:id" component={MovieDetail} />
            </Switch>
        </div>
    );
};

MovieDetail.tsx:

代码语言:javascript
运行
复制
import React from 'react';

export const MovieDetail = () => {

    return (
            <h1>Movie Title</h1>
    );
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-10 21:31:33

您需要将exact添加到您的电影路由

代码语言:javascript
运行
复制
<Switch>
    <Route exact={true} path="/" component={App} />
    <Route exact={true} path="/movies" component={Movies} />
    <Route exact={true} path="/movies/:id" component={MovieDetail} />
    <Route component={NotFound} />
</Switch>

或者移动/movies路由更有意义

代码语言:javascript
运行
复制
<Switch>
    <Route exact={true} path="/" component={App} />
    <Route exact={true} path="/movies/:id" component={MovieDetail} />
    <Route path="/movies" component={Movies} />
    <Route component={NotFound} />
</Switch>
票数 2
EN

Stack Overflow用户

发布于 2020-01-10 21:12:24

将exact添加到你的"Movie“路线

here is answer

由于您包含movie/1子链接将匹配move路由

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59681483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档