Next.js 应用程序错误:发生客户端异常(有关更多信息,请参阅浏览器控制台)

2024-02-06

尝试加载呈现从外部 API 提取的产品信息的页面时看到上述错误。错误仅发生在生产环境中,本地一切运行正常。检查控制台时出现此错误:

TypeError: undefined is not a function (near '...n.map...')

“Next Build”工作正常并构建了生产版本。 “下一步开始”也运行良好,并且控制台或其他任何地方都没有抛出错误。仅当我推送到生产环境后才会出现错误。很困惑到底发生了什么。我的代码如下:

呈现产品列表的组件:

import type { NextPage } from 'next'
import React, { useState, useEffect, useContext} from 'react';
import styles from '../styles/Home.module.css'
import DepopIcon from './icons/depop.svg'
import { Image, Main, Heading, Paragraph, Nav, Icons, Header, Grommet, Box, Button, Grid, Text, Footer, Anchor } from 'grommet';
import {
  Instagram,
  Shop,
  Cart
} from 'grommet-icons';
import { useRouter } from 'next/router';

export default function ProductsList() {
    const router = useRouter();
    // load our products state variable
    const [products, setProducts] = useState([]);
    const [prodImg, setProdImg] = useState([]);


    function handleProdClick(id){
        router.push({ pathname: "/product", query: { id: id } })
    }

    const getProducts = async () => {
         const response = await fetch("/api/getproducts");
         var data = await response.json();
         data = JSON.parse(data);
         await setProducts(data);
    }

    useEffect(() => {
            getProducts();
        }, [])
    //

    // build areas list for our grid
    const areaVar = "area";
    const cols = 3;
    var r = 0;
    var c = 0;
    var areas = []
    for (let x = 1; x < products.length+1; x++){
        const name = areaVar+x.toString()
        areas.push({ name: name, start: [r,c], end: [r,c]  })
        r += 1
        if (x % 3 == 0){
            r = 0
            c += 1
        }
    }
    //

    console.log(products);

    // create our product objects for our grid
    var productObjs = [];
    if (typeof products != "undefined" && products != null){
        productObjs = products.map((product, index) => {
            return(
            <Box
              key={product._id}
              gridArea= {areas[index].name}
              background="#003311"
              direction="column"
              pad="none"
              align="center"
              onClick={() => {handleProdClick(product._id)}}
            >
                <Image
                  src={product.frontImage} fill={true} fit="cover"
                  onMouseOver={e => (e.currentTarget.src = product.backImage)}
                  onMouseOut={e => (e.currentTarget.src = product.frontImage)}
                />
                <Box
                  direction="row"
                  pad="xsmall"
                  align="center"
                  gap="large"
                  justify="between"
                  animation="fadeIn"
                >
                  <Text color="#fff" size="medium">{product.name}</Text>
                  <Text color="#fff" size="medium">{product.color}</Text>
                  <Text color="#fff" size="medium">{product.price} USD</Text>
                  <Text color="#fff" size="medium">{product.size}</Text>
                </Box>
           </Box>
            );
        });
    }

    //
    const rows = []
    for (let i = 0; i < r; i++){
        rows.push('large')
    }
    return (
        <Grid
          rows={rows}
          columns={['flex', 'flex', 'flex']}
          gap="none"
          areas={areas}
        >
          {productObjs}
        </Grid>
    );
}

使用上述组件的页面:

import type { NextPage } from 'next'
import React, { useState, useContext, useEffect} from 'react';
import { Paragraph, Main, Nav, Icons, Header, Grommet, Box, Button, Grid, Text, Footer, Anchor } from 'grommet';
import ContactHeaderUnit from '../components/ContactHeaderUnit.tsx'
import FooterUnit from '../components/FooterUnit.tsx'
import ProductsList from '../components/ProductsList.tsx'

const Shop: NextPage = () => {

      return (
          <Grommet
              full={true}
              background="#fffced"
              theme={{
                  global: { font: {
                              family: "Alice"
                            }},
                paragraph: {
                    font: {
                      family: 'Arial',
                    },
                },
                label: {
                    font: {
                      family: 'Arial',
                    },
                  },
              }}
          >
            <ContactHeaderUnit/>
            <ProductsList/>
            <FooterUnit/>
          </Grommet>
      )
}

export default Shop;

我遇到了这个错误,尽管我在构建时没有遇到错误,但花了几天时间才弄清楚是非常困难的。事实证明,我的一些传入数据被渲染成一些无效的 html(动态创建的脚本标签出了问题)。我能够通过反复试验来解决此错误,删除传入数据的不同部分并查看我的页面是否会呈现。如果我必须再做一次,我会从那里开始。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Next.js 应用程序错误:发生客户端异常(有关更多信息,请参阅浏览器控制台) 的相关文章

随机推荐

  • xaml.cs 中的 Xamarin 局部变量并通过 XAML 文件进行打印

    我希望能够打印 XAML 中 CurrentOrder 的属性 这是我到目前为止所拥有的 OrderPage xaml cs public partial class OrderPage ContentPage private Order
  • 使用 MediatR 时可以让一个处理程序调用另一个处理程序吗?

    或者这被认为是不好的做法还是什么 我有一个通知触发 4 5 个处理程序 这些处理程序依次调用数据库来检索数据 每个这些调用也可以单独调用 因此它们本身就是请求 处理程序 Thanks Jimmy Bogard mediatr 的作者 说你应
  • CListCtrl 用鼠标选择多行

    There is a CListCtrl with SetExtendedStyle LVS EX GRIDLINES LVS EX FULLROWSELECT a single selection is false I want to b
  • 如何使用Windows Media Player播放加密的视频文件?

    我加密我的 mp4转换为自定义格式 opu 现在我应该解密我的文件并将它们保存到应用程序开始时的临时文件夹中 并使用它们来播放WindowsMediaPlayerC 中的控制 所以我有从临时文件夹中窃取文件的风险 防止我的文件被盗的最佳方法
  • 从亚马逊s3存储桶检索静态文件

    我正在尝试以这样的方式配置我的 nginx 每当出现一些错误的网关响应时 我都会尝试从 s3 存储桶中获取静态 html 内容 请求的url结构为some bucket folder1 folder2 text 数据存储在 s3 存储桶中
  • 如何设置编辑器以在 Windows 上使用 Git?

    我正在尝试Windows 上的 Git 我尝试 git commit 并收到此错误 终端很笨 但没有 VISUAL 也没有 编辑器定义 请提供 使用 m 或 F 选项的消息 所以我发现我需要一个名为 EDITOR 的环境变量 没问题 我将其
  • 单元测试 Maven 插件

    我正在寻找有关如何为 Maven 插件编写单元测试的信息 虽然有a page http maven apache org plugin developers plugin testing html在关于这一主题的 Maven 站点上 只有一
  • 不可哈希类型:“dict”类型错误[重复]

    这个问题在这里已经有答案了 假设我有这本字典 items 1 title u testing123 description u testing456 2 description u testing123 description u test
  • IPython 中的物理括号符号

    我正在努力拥有ket符号通常在乳胶中写为 ket psi 然而 当写在 当使用以下方式编写时 这也不起作用IPython display latex documentclass article usepackage amsmath begi
  • AngularJS - 将多个 get 请求收集到 json 数组中,然后传递给指令

    我是角度新手 一直在努力解决我的问题 我需要多次访问 API 来获取用户数据 将所有内容存储为 JSON 数组 当收集所有数据 所有结果作为一个数组 时 需要将其传递给指令 该指令将使用它来绘制可视化 例如 d3 js 饼形图 scope
  • ctx.Err() 与 ctx.Done() chan 关闭检查:有区别吗?

    我处于一个长时间运行的可取消函数中 该函数具有永远循环 我需要检查上下文是否已关闭 go func for if ctx Err nil return do work vs go func for select case lt ctx Do
  • Xcode 组织者尝试在错误的目录路径访问传输程序

    Transporter not found at path usr local itms bin iTMSTransporter You should reinstall the application 所以我检查了路径 Applicati
  • java 具有透明度的全屏窗口

    我正在尝试使用 Java 创建一个覆盖整个屏幕的全屏窗口 这个窗口还必须有一定的透明度 大约30 50 透明 当我说整个屏幕时 我的意思是它覆盖了所有内容 包括 OSX Linux Windows 中的扩展坞 任务栏 菜单栏 当我说透明度时
  • Autofac - 将属性注入 asp.net mvc 控制器

    我有一个基本控制器 它继承了我的所有控制器 这个基本控制器有一些属性 我想使用属性注入来注入 我的控制器注册看起来像这样 builder RegisterControllers Assembly GetExecutingAssembly 我
  • 在 ListView 布局模板中显示总计

    我使用 ListView 控件 ASP NET 2008 来显示一堆数据行 在底部我想要一些总计 我最初打算在 LayoutTemplate 中定义页眉和页脚 并使用一些本地函数 即 获取总计 但 LayoutTemplate 似乎不处理
  • 如何使用 java Firebase Admin SDK 将分析标签添加到数据消息?

    自 7 月 1 日起 Firebase 要求向消息添加标签 以便分析显示数据消息发送的数量等 从 2019 年 7 月 1 日星期一开始 您将能够通过分析标签过滤数据 在该日期之后 没有分析标签发送的数据消息可能不会在此仪表板中显示 问题是
  • 连续检查队列

    我想要一个函数来在一个线程上连续检查队列是否有新添加 显然 可以选择连续循环睡眠 但我想要一些不那么浪费的东西 我考虑了某种类型的等待句柄 然后让队列向它发出信号 但我无法安全地覆盖 Enqueue 因为它不是虚拟的 现在我正在考虑封装一个
  • 奇怪的重复出现的模板和模板参数相关的子类化问题

    我正在尝试使以下代码工作 template lt class derived class object typename derived Object gt struct Base using Derived derived using O
  • Scala:通过依赖注入协调类型类

    最近 Scala 博主们似乎对类型类模式 其中一个简单的类具有由符合某些特征或模式的附加类添加的功能 作为一个过于简单化的例子 简单的类 case class Wotsit value Int 可以适应 Foo 特征 trait Foo T
  • Next.js 应用程序错误:发生客户端异常(有关更多信息,请参阅浏览器控制台)

    尝试加载呈现从外部 API 提取的产品信息的页面时看到上述错误 错误仅发生在生产环境中 本地一切运行正常 检查控制台时出现此错误 TypeError undefined is not a function near n map Next B