Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NextJS路由:为什么需要不同的客户端和服务器路由?_Javascript_Reactjs_Express_Next.js - Fatal编程技术网

Javascript NextJS路由:为什么需要不同的客户端和服务器路由?

Javascript NextJS路由:为什么需要不同的客户端和服务器路由?,javascript,reactjs,express,next.js,Javascript,Reactjs,Express,Next.js,我对反应有些陌生,但对NextJS完全陌生,我正在尝试自学。我已经阅读了NextJS“入门”教程,以及其他一些教程。我不理解为什么需要区分客户端路由和服务器上的路由,也就是说,为什么作为示例给出的客户端路由使用查询,而服务器路由不使用查询。我知道我看到的不是森林,而是树木,所以如果有人能为我指出“摸索”NextJS路线的正确方向,我将不胜感激 从教程中,在客户端,我们可能有 <Link href={`/blog?slug=${slug}`} as={`/blog/${slug}`} pre

我对反应有些陌生,但对NextJS完全陌生,我正在尝试自学。我已经阅读了NextJS“入门”教程,以及其他一些教程。我不理解为什么需要区分客户端路由和服务器上的路由,也就是说,为什么作为示例给出的客户端路由使用查询,而服务器路由不使用查询。我知道我看到的不是森林,而是树木,所以如果有人能为我指出“摸索”NextJS路线的正确方向,我将不胜感激

从教程中,在客户端,我们可能有

<Link href={`/blog?slug=${slug}`} as={`/blog/${slug}`} prefetch>
  ...
</Link>
嗯。但是为什么呢?为什么本地链接不简单

<Link href={`/blog/${slug}`}  prefetch>
      ...
    </Link>

...
??或者,为什么NextJS不处理服务器端路由
/blog?slug=${slug}


我可以遵循NextJS站点“入门”教程(我自己输入代码并测试代码)所做的,但就路由而言,我对我正在做的事情和原因有点茫然。很明显,我在这里遗漏了一个重要的(基本的)元素,如果你看一下路线,我会很感激你提供我的错误的线索。

/blog/:slug
/blog/${slug}

在这里,slug可以采用不同的值作为参数。如果您想让NextJs处理这些路由,您需要为slug可以接受的每个值实现一个路由。比如说

/blog/slug1
/blog/slug2
/blog/slug3

这个数字可能增长得很快。因此,我们使用了一个Express服务器,这样我们就可以截获路由
/blog
的请求,并将slug作为参数传递到
blog
页面

您不需要不同的客户端和服务器路由。这不是强制性的,除非您正在使用客户端路由和动态路由。 如果您不想使用它,您可以使用我们的老朋友
getInitialProps
函数切换到服务器端路由,以实现这一点

server.get("/dashboard", (req, res) => {
    const actualPage = '/dashboard';
    const queryParams = {
        username: req.query.username
    };
    app.render(req, res, actualPage, queryParams);
  });
Dashboard.getInitialProps = async(ctx)  => {

    const query = ctx.query;

    const username = query.username;

    return {"username": username};

}