next.js 和material-ui - 让它们工作

2024-03-21

我给予next.js旋转了一下,我无法让最简单的设置起作用。

这是我的设置:

相关库:

  • “反应”:“^16.2.0”,
  • "react-dom": "^16.2.0",
  • "下一个": "^4.2.2",
  • "express": "^4.16.2",
  • "下一个路线": "^1.2.0",
  • "material-ui": "^0.20.0",

服务器.js

const express = require('express')
const next = require('next');
const routes = require('./routes');
const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handler = routes.getRequestHandler(app, ({req, res, route, query}) => {
  render(req, res, route.page, query);
});


const server = express();

app.prepare()
.then(() => {
  server.use(handler).listen(port, (err) => {
    if (err) throw err
    console.log(`> Ready on http://localhost:${port}`)
  })
})

路线.js

const routes = module.exports = require('next-routes')();

routes
.add({name: 'walk', pattern: '/walk/:id'}) 

_document.js

import Document, { Head, Main, NextScript } from 'next/document';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import getMuiTheme from 'material-ui/styles/getMuiTheme';


export default class extends Document {
    static async getInitialProps(ctx) {
        const props = await Document.getInitialProps(ctx);
        const userAgent = ctx.req.headers['user-agent'];

        return {
            ...props,
            userAgent,
        };
    }

    render() {
        return (
            <html>
         <Head>
          <title>ShareWalks</title>
          <meta name="viewport" content="initial-scale=1.0, width=device-width" />
          <link rel="stylesheet" href="https://sharewalks.com/shared.css" />
         </Head>
                <body>
                <MuiThemeProvider muiTheme={getMuiTheme({ userAgent: this.props.userAgent })}>
                    <div>
                        <Main />
                        <NextScript />
                    </div>
                </MuiThemeProvider>
                </body>
            </html>
        );
    }
}

pages/index.js (这有效)

import React, {Component} from 'react';
import Head from 'next/head';


class App extends Component {

  static async getInitialProps(args) {
    return {};
  }


  render() {
    return (
      <div>
         <Head>
          <title>ShareWalks</title>
         </Head>
         <p>Yup</p>
      </div>
    );
  }
}
export default App;

pages/walk.js(这里出错)

import React, {Component} from 'react';
import {Head} from 'next/head';


class Walk extends Component {
  static async getInitialProps({query}) {
    console.log('query: ', query);
    return {id: query.id}; //added to props
  }
  render() {
    return (
     <div>
       <Head>
        <title>Walking</title>
       </Head>
      <p>{`Walk #${this.props.id}`}</p>
       </div>
   );
  }

}

export default Walk;

当我转到 localhost:8080/walk/2 或 localhost:8080/walk?id=2 时,出现错误。控制台确实按预期打印出了 id,但随后是这样的:

query:  { id: '2' }
TypeError: Cannot read property 'toLowerCase' of undefined
    at a.renderDOM (/home/terry/myProjects/PWA/sw-next/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:36:390)
    at a.render (/home/terry/myProjects/PWA/sw-next/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:36:228)
    at a.read (/home/terry/myProjects/PWA/sw-next/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:35:250)
    at renderToString (/home/terry/myProjects/PWA/sw-next/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:44:6)
    at renderPage (/home/terry/myProjects/PWA/sw-next/node_modules/next/dist/server/render.js:174:26)
    at Function.getInitialProps (/home/terry/myProjects/PWA/sw-next/node_modules/next/dist/server/document.js:83:25)
    at Function._callee$ (/home/terry/myProjects/PWA/sw-next/.next/dist/pages/_document.js:138:59)
    at tryCatch (/home/terry/myProjects/PWA/sw-next/node_modules/regenerator-runtime/runtime.js:62:40)
    at Generator.invoke [as _invoke] (/home/terry/myProjects/PWA/sw-next/node_modules/regenerator-runtime/runtime.js:296:22)
    at Generator.prototype.(anonymous function) [as next] (/home/terry/myProjects/PWA/sw-next/node_modules/regenerator-runtime/runtime.js:114:21)

第一个猜测是用你的服务器文件尝试这个 - 最大的问题是你没有在路由本身上设置 id 参数,所以在客户端 - 它不知道寻找 ID。

尝试这个:

const express = require('express')
const next = require('next')

const port = parseInt(process.env.PORT, 10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

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

  server.get('/walk/:id', (req, res) => {
    return app.render(req, res, '/walk', { id: req.params.id })
  })

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

  server.listen(port, (err) => {
    if (err) throw err
    console.log(`> Ready on http://localhost:${port}`)
  })
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

next.js 和material-ui - 让它们工作 的相关文章

随机推荐

  • 我什么时候应该重写 Equals 函数? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 总是覆盖等于 https stackoverflow com questions 1549553 java always override equals 我应该覆盖equals我创建的任何类
  • Python:Numpy 将数组的每一行与另一个数组的每一行相乘

    我知道对此存在一些疑问 这应该可以通过广播实现 但不知怎的 我真的不明白广播如何通过添加附加轴来工作 还有一个类似的问题 其中一个数组的每一列与另一个数组的每一列相乘 将每一列与每一列相乘 https stackoverflow com q
  • Flowtype - 如何编写类工厂的声明,例如骨干模型?

    广泛的谷歌搜索和阅读 Flow 文档和示例并没有显示 Javascript 中非常常见的模式的任何示例 具有返回类的函数 一个典型的例子是 Backbone var User Backbone Model extend getFullNam
  • 为什么 DOCUMENT_ROOT 与远程服务器上的 realpath('.') 不同

    with echo realpath br echo dirname FILE br echo realpath dirname FILE br echo SERVER PHP SELF br echo getcwd 我总是得到 servi
  • 如何检查 CLI 程序是否正在等待来自 stdin 的输入?

    如何检查我刚刚使用 CreateProcess 启动的 CLI 程序是否正在等待来自 Windows C API 的标准输入的输入 正如上面的一些评论所说 一旦程序已经开始等待 您就无法检查程序是否正在等待标准输入 您可以使用事件处理程序
  • 2 个文档在 MongoDB 中合并

    我需要从 MongoDB 中不同集合的两个文档中获取数据 其中有 1 个公共字段 对数据库没有更改 我是新手 请帮助我 a db users find username email protected cdn cgi l email pro
  • 使用 JQuery 从另一个网站获取 HTML:可能吗?合法的?

    我正在尝试从不在同一域中的网页获取 HTML 代码 html 文本被解析并总结了在 HTML 代码来源的页面上找到的食谱 食谱名称 主要成分 步骤数 然后 用户可以单击该链接并转到域外的该网页来查看菜谱 我知道同源策略 但这是否适用于从国内
  • 使用 Chrome 打开正文中包含 HTML 的 Outlook

    虽然我已经从 Stack 中找到了很多这方面的信息 特别是here https stackoverflow com questions 5620324 mailto with html body 我只是想绝对确定在 Chrome 中无法执行
  • 嵌套哈希中的 Form_tag 参数

    我有一个没有与之关联的模型的表单 所以我正在使用form tag而不是form for 正如预期的那样 当用户提交表单时 每个字段都包含在 params 哈希中 但表单会发生很大变化 我希望在 params 哈希中包含一个哈希 该哈希将保存
  • .Net 3.5 中 Dynamic 关键字的使用

    我使用 net v4 5 在 Visual Studio 2013 中编写了这段代码 我遇到的问题是 我现在必须降级到 net v3 5 而动态关键字会抛出错误 因为缺少程序集引用 net v3 5 中是否有与 动态 等效的类型 或者有什么
  • Python Curses 不清除屏幕

    我想在Python下使用Curses而不清除屏幕 原因是我希望我的应用程序在现有屏幕上弹出一个简单的小菜单并很快退出 退出时将弹出菜单中丑陋的部分保留在屏幕上是可以接受的 但不是首选 我们的想法是将其用于快速实用的系统管理应用程序和脚本 其
  • 我的拉取请求已合并,下一步该做什么?

    我最近参与了 GitHub 的一个项目 我做了以下事情 分叉原始存储库 将其克隆到我的本地计算机 创建一个分支来修复现有错误 修复该分支中的错误 将该分支推送到我的存储库 向存储库的作者发送拉取请求以合并我的fix分支到其主分支 这是我第一
  • 如何在C++中输出变量的二进制值

    我的 C 编程课上有一项作业 要求编写一个输出变量值的二进制值的函数 例如 如果我将 a 的值设置为字符 我应该得到 a 输出的二进制值 我的 C 教授并不是全世界最伟大的 而且我在使用他给我们的神秘示例来使我的代码正常工作时遇到了困难 现
  • 在 LINQ 中学习表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您可以推荐哪些有关 LINQ 表达式树的文章 教程 Link https learn microsof
  • 在执行另一个方法时(动态)更新标签文本

    我是一名 iOS 开发人员 目前正在开发 iPhone 应用程序 我有一个关于更新 ViewController 内容的简单问题 如果我能得到了解此问题的人的反馈或有建议的解决方案 我将不胜感激 我正在编写一种方法 不断更新标签的文本 以及
  • 如何在通过域名输入时仅显示一次页面预加载器?

    所以 我在主页上有 jQuery 页面预加载器 如下所示
  • 如何在 Android Studio (4.2) 中查看 JetpackCompose kotlin 源代码? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 When I command click进入 JetpackCompose 函数 我看到的全部如下 根据 Android Studio 4
  • Ansible 要求安装 MySQL-python,尽管它已经安装

    我正在尝试使用在 Mac OSX 上运行的 Ansible 控制器创建一个新的 MySQL 数据库 当我第一次得到msg the python mysqldb module is required错误消息 我添加了一个任务来安装MySQL
  • 无法通过java Runtime.getRuntime().exec()执行CURL命令

    我正在使用 java 执行curl 命令 curl i user OAMADMIN tenant 358922247351079 svc 358922247369079 APPID Iuj 2swilg5fhv H Content Type
  • next.js 和material-ui - 让它们工作

    我给予next js旋转了一下 我无法让最简单的设置起作用 这是我的设置 相关库 反应 16 2 0 react dom 16 2 0 下一个 4 2 2 express 4 16 2 下一个路线 1 2 0 material ui 0 2