【问题标题】:Next.js with custom express server re-renders all custom routesNext.js 与自定义快速服务器重新呈现所有自定义路由
【发布时间】:2019-01-01 14:20:54
【问题描述】:

我已经在 server.js 中设置了一个自定义快速服务器,就像 Next.js 的文档一样,给出了一个 example of,但是,每次我导航到那里定义的任何动态路由时,都会重新渲染应用程序,包括包含我的样式的应用程序,导致无样式内容的闪现非常糟糕。有没有办法确保动态路由不会触发重新渲染?

这是我的 server.js 文件:

const express = require("express");
const next = require("next");

const dev = process.env.NODE_ENV !== "production";
const app = next({ dev });
const handle = app.getRequestHandler();

app
    .prepare()
    .then(() => {
        const server = express();

        server.get("/press/:slug", (req, res) => {
            const actualPage = "/press";
            const queryParams = { slug: req.params.slug, apiRoute: "press" };
            return app.render(req, res, actualPage, queryParams);
        });

        server.get("/locations/:slug", (req, res) => {
            const actualPage = "/locations/location";
            const queryParams = { slug: req.params.slug, apiRoute: "location" };
            return app.render(req, res, actualPage, queryParams);
        });

        server.get("/insights/:slug", (req, res) => {
            const actualPage = "/insights/insight";
            const queryParams = { slug: req.params.slug, apiRoute: "insight" };
            return app.render(req, res, actualPage, queryParams);
        });

        // server.get("/_preview/:id/:wpnonce", (req, res) => {
        //     const actualPage = "/preview";
        //     const queryParams = { id: req.params.id, wpnonce: req.params.wpnonce };
        //     app.render(req, res, actualPage, queryParams);
        // });

        const robotsOptions = {
            root: __dirname + '/static/',
            headers: {
                'Content-Type': 'text/plain;charset=UTF-8',
            }
        };
        server.get('/robots.txt', (req, res) => (
            res.status(200).sendFile('robots.txt', robotsOptions)
        ));

        const sitemapOptions = {
            root: __dirname + '/static/',
            headers: {
                'Content-Type': 'text/xml;charset=UTF-8',
            }
        };
        server.get('/sitemap.xml', (req, res) => (
            res.status(200).sendFile('sitemap.xml', sitemapOptions)
        ));

        server.get("*", (req, res) => {
            return handle(req, res);
        });

        server.listen(3000, err => {
            if (err) throw err;
            console.log("> Ready on http://localhost:3000");
        });
    })
    .catch(ex => {
        console.error(ex.stack);
        process.exit(1);
    });

【问题讨论】:

  • 您使用的是Next路由器链接还是普通链接?任何标准链接都将强制重新加载,而下一个路由器链接将在客户端上解析。
  • 使用 Next 提供的 组件。
  • 您能否举例说明您如何使用您的链接?我已经多次看到由于链接使用不当引起的这个问题。
  • /insights/${this.state.posts[key].fields.slug}}> 阅读更多

标签: javascript reactjs express next.js


【解决方案1】:

你的 href 应该是 as 属性。根据文档重建您的 href 属性 看看 nextjs 文档 https://nextjs.org/docs#with-link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    相关资源
    最近更新 更多