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

React子组件中的道具缺少对象

陆洛城
2023-03-14

我是React的初学者,所以请对我有耐心。)

我有一个父组件,它有两个不同的按钮,可以触发子组件,子组件是一个模态,根据哪个按钮触发了模态,子组件内部必须显示不同的内容。这两个组件都是功能组件。子模式应该通过道具从父模式接收触发按钮的值。该按钮的名称是一个数字,对应于子组件中定义的数组中的对象索引。

当我安慰的时候。记录道具,我看到它们被传递到模态三次。第一次按钮的值确实通过道具传递,但在第二段和第三段的道具中它消失了,我得到一个错误,称为TypeError:Cannotread property'inf1',of undefined。

我无法理解为什么道具会经过三次,为什么第一次之后按钮的值会从道具中消失。

这是我的密码:

起源:

import React, { useState } from "react";
import Container from "react-bootstrap/Container";
import Col from "react-bootstrap/Col";
import Button from "react-bootstrap/Button";
import ExperienceModal from "./ExperienceModal";

function Experience() {

    const [modalShow, setModalShow] = useState({
        value: false,
        bname: "0"
    });

    function defineModal(event) {
        event.preventDefault();
        setModalShow({ value: true, bname: event.target.value });
    }

    function hideModal(event) {
        event.preventDefault();
        setModalShow({ value: false, bname: "0" });
    }

    return (

        <Container fluid>
            <Col>
                <Button value="1" onClick={defineModal}>
                    More Information
        </Button>
                {""}
            </Col>
            <Col>
                <Button value="2" onClick={defineModal}>
                    More Information
        </Button>
                {""}
            </Col>
            <ExperienceModal
                onHide={hideModal}
                show={modalShow.value}
                mshow={modalShow.bname}
            />
        </Container>


    );
}

export default Experience;

儿童:

import React from "react";
import Button from "react-bootstrap/Button";
import Modal from "react-bootstrap/Modal";

function ExperienceModal(props) {

    const x = props.mshow;
console.log(props.mshow);
    
    const modalContent = [
        {
            inf1: "text0",
            inf2: "comment0",
            inf3: "remark0"
        },
        {
            inf1: "text1",
            inf2: "comment1",
            inf3: "remark1"
        },
        {
            inf1: "text2",
            inf2: "comment2",
            inf3: "remark2"
        }
    ];

    return (

        <Modal
            {...props}
            size="lg"
            aria-labelledby="contained-modal-title-vcenter"
            centered
            animation="true"
            backdrop="static"
        >
            <Modal.Header closeButton>
                <Modal.Title id="contained-modal-title-vcenter">
                    Additional Information
        </Modal.Title>
            </Modal.Header>
            <Modal.Body>
                <h4>Centered Modal</h4>
                <p>{modalContent[x].inf1}</p>
                <p>{modalContent[x].inf2}</p>
                <p>{modalContent[x].inf3}</p>
            </Modal.Body>
            <Modal.Footer>
                <Button onClick={props.onHide} variant="success">
                    Close
        </Button>
            </Modal.Footer>
        </Modal >
    );
}

export default ExperienceModal;

这是我的沙盒的链接:https://201vz.csb.app/

这是一个来自浏览器控制台的屏幕截图,因为沙盒控制台仅显示一个按钮值正确的道具交付,但我仍然得到相同的错误:

谁能帮帮我,这个错误快把我逼疯了!谢谢

共有1个答案

颜实
2023-03-14

您已经从多个组件调用了体验模式,并且只从体验传递了适当的道具

<ExperienceModal
  show={modalShow.value}
  onHide={() => setModalShow({ value: false, bname: "0" })}
  mshow={modalShow}
/>

而不是来自E1

// mshow is missing here
<ExperienceModal show={modalShow} onHide={() => setModalShow(false)} />

所以只需添加条件来检查道具是否存在。

//check for mshow
const x = props.mshow ? props.mshow.bname : 0; // default 0 if no props

我在沙盒中修复了:https://9nfih.csb.app/

还有其他警告,所以考虑解决这些问题。

 类似资料:
  • 在我的react/redux应用程序中,每次安装组件时,我都会调用一个操作从redux中的状态检索数据。我的方法行不通 下面是我得到的错误: React Hook use效应有一个缺失的依赖项:道具。要么包含它,要么删除依赖数组。然而,当任何道具发生变化时,“道具”都会发生变化,因此首选的修复方法是将“道具”对象的结构分解为在use效应调用之外的对象,并指称在use效应反应挂钩/穷举deps中的那

  • 问题内容: 我有下一个代码,随便抛出: 反应/道具类型onClickOut; 道具验证中缺少 反应/道具型儿童;道具验证中缺少 已定义,但eslint无法识别。 package.json .babelrc .eslintrc 问题答案: 问题出在handleClick中的流注释中,我删除了它,并且工作正常,谢谢@alik

  • 反应组分 如何在组件中声明输入组件?

  • 我正在做一个React-Native项目,我意识到React-Native似乎打破了React-flow(父到子)道具更新。 基本上,我是从“应用程序”组件调用“菜单”组件,将一个道具传递给“菜单”。然而,当我更新“应用程序”状态时,“菜单”上的道具应该更新,但这不会发生。我做错什么了吗? 这是我的密码: 一个pp.js 菜单js

  • 最后,在中有一个子组件,名为。这就是问题所在。我还将从获得的项传递到。因此,数据流是(连接)>(未连接)>(连接)。 连接到Redux。它使用redux中的一些操作来更新中的项。当我在中更新时,可以很好地接收更新后的数据,但是却什么都接收不到。中的项从未更新。 我发现问题出在将连接到Redux时。如果没有连接到redux,它也会接收更新的道具,就像一样。 组件如下。我已经试着尽可能地简化它们。 D

  • 我有一个React应用程序,其中来自父组件的道具被传递到子组件,然后道具设置子组件的状态。 如何让它更新子组件上的状态? 我的精简代码: