当前位置: 首页 > 知识库问答 >
问题:

React-TypeError:无法将未定义或null转换为对象

徐文斌
2023-03-14

我正在我的反应应用程序中创建一个上一个和下一个按钮。我试图获取页面的当前索引(我有一个存储在对象中的页面列表)

这是密码

import React, { useState, useEffect } from "react";

function Preview({ match }) {
  const [imageName, setImageName] = useState(); //IMPORTANT
  const [images, setImages] = useState(); //IMPORTANT

  const [currentIndex, setCurrentIndex] = useState(); //IMPORTANT

  function getIndexByImageName(name) { //IMPORTANT
    Object.keys(images).map((image, index) => {
      if (image === name) return index;
    });
  }

  function importAll(r) {
    let images_ = {};

    r.keys().map((item, index) => {
      images_[item.replace("./", "")] = r(item);
    });

    return images_;
  }

  useEffect(() => {
    //This sets the state.
    setImageName(String(match.params.id));
    setImages(importAll(require.context("../coco-images", false, /\.jpg/)));
  }, []);

  useEffect(() => {
    setCurrentIndex(getIndexByImageName(imageName)); //IMPORTANT (This sets the current index. But returns an error)
  }, []);

  return null;
}

export default Preview;

我得到的错误是“类型错误:无法将未定义或空转换为对象”

需要明确的是,imageName和images不是空的或未定义的(因为当I console.log它时,它有我需要的数据)。

提前谢谢!

共有2个答案

胡厉刚
2023-03-14

我已经修好了。

我通过创建一个状态“finishedload”来修复它,并在finishedload为true时设置该状态

下面是完整的代码

import React, { useState, useEffect } from "react";
import loading from "../images/loading.gif";

function Preview({ match }) {
  const [imageName, setImageName] = useState();
  const [images, setImages] = useState();
  const [finishedLoading, setFinishedLoading] = useState(false);
  const [currentIndex, setCurrentIndex] = useState();

  function setCurrent() {
    if (finishedLoading) {
      Object.keys(images).map((image, index) => {
        if (image === imageName) setCurrentIndex(index);
      });
    } else {
      return null;
    }
  }

  function importAll(r) {
    let images_ = {};

    r.keys().map((item, index) => {
      images_[item.replace("./", "")] = r(item);
    });

    setFinishedLoading(true);
    return images_;
  }

  useEffect(() => {
    setImageName(String(match.params.id));
    setImages(importAll(require.context("../coco-images", false, /\.jpg/)));
  }, []);

  useEffect(() => {
    if (finishedLoading) setCurrent(); //I've change getIndexByName to setCurrent
  }, [finishedLoading]);

  return null;
}

export default Preview;
淳于恺
2023-03-14

为图像指定默认值如何:

const [images, setImages] = useState({}); //IMPORTANT
 类似资料:
  • 获取错误。我尝试做多个选择,并更改第二个选择的数据与第一个选择的上更改材料表行。我正在使用Firebase。 当“store.Urunler”为null或未定义时,我会出现此错误。而且我的产品没有列在菜单项上,这意味着选择是空的,但state.products有数据 我怎样才能克服这个错误。我还想添加到Urunler,选择一个输入。我知道我应该为onChanges调用函数,但如果它起作用,我以后会

  • 我编写了两个函数,可以有效地复制JSON.stringify(),将一系列值转换为stringify版本。当我将代码移植到JSBin并在一些示例值上运行它时,它运行得很好。但是我在一个专门为测试这个而设计的规范运行程序中遇到了这个错误。 我的代码: 我从测试人员那里得到的错误消息是: 它似乎失败了:例如stringifyJSON(null)

  • 我正在运行一个React应用程序。 当我通过路由(单击按钮或链接)进入页面时,页面工作正常,但当我重新加载页面时,页面崩溃。我看不到错误在哪里,控制台和源代码显示为空,这是服务器消息控制台消息。 这是运行的代码。我尝试删除currentuser、addhabity和许多其他东西,只是为了了解错误的来源。没有结果。如果我通过链接进入页面,一切正常。 HabiddView.web.jsx 生活orm.

  • 我正在尝试根据表所获得的数据动态呈现表。这一部分是有效的,但是当我实现了数据的过滤版本时,我在行上得到了TypeError Undefined或Null to object错误。 以下是供参考的数据(目前只是一些模拟数据): 它在我添加部分之前工作,我将tableData直接传递到,我不知道为什么。有人能帮我吗?

  • 我试图检查是否为。但我得到了一个错误: 无法将null转换为对象 我该如何进行? 我正在检查组和用户是否存在,否则将添加它们。

  • 代码如下: this.document.Sections是包含属性(以及对象)的对象。 如何消除这个错误?