无法读取未定义的属性(读取“名称”):ReactJs

Posted

技术标签:

【中文标题】无法读取未定义的属性(读取“名称”):ReactJs【英文标题】:Cannot read properties of undefined (reading 'name'): ReactJs 【发布时间】:2021-12-06 01:36:15 【问题描述】:

当我尝试记录时,我的控制台中有数据,但我无法使用它。

我的数据对象看起来像:

_id:'616bf82d16a2951e53f10da4',姓名:'abd',电子邮件:'q@gmail.com',电话:'1234567890',工作:'singer',……

访问令牌:“eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYxNmJmODJkMTZhMjk1MWU1M2YxMGRhNCImlhdCI6MTYzNDYyMDk3MiwiZXhwIjoxNjM1MDUyOTcyfQ.b9NZB-ogrdu_SulT1xJ8h62j”

cpassword: "$2a$12$BZ17rY63qrq.Fw9wC29A.eabcuAHSY0mXfxSvcpxOFGfUeW4NUkMO"

电子邮件:“q@gmail.com”

名称:“abd”

电话:“1234567890”

代币:(3) […, …, …]

作品:“歌手”

__v: 3

_id:“616bf82d16a2951e53f10da4”

[[原型]]:对象

import "./about.css"
import useHistory from "react-router-dom"


export default function About() 
    const history=useHistory();
    const [userData,setUserData]=useState();
    const callAboutPage=async()=>
        try 
            const res=await fetch("/about",
                method:"GET",
                headers:
                    Accept:"application/json",
                    "Content-Type":"application/json"
                ,
                credentials:"include"
            )
            const data=await res.json();
            console.log(data);
            setUserData(data);

            if(!res.status===200)
               const error=new Error (res.error)
               throw error
            
            
         catch (error) 
            console.log(error)
            history.push("/login")
        
    
    
  useEffect(() => 
     callAboutPage();
  , [])

    return (
        <div className="abt-body">
            <div className=" d-flex justify-content-center align-items-center about">
                
                Name:userData.name
                <br />
                Id:userData._id
                <br />
                Email:userData.email
                <br />
                Phone:userData.phone
                <br />
                Work:userData.work
             
                

                

            </div>
           

                <div class="card-footer text-muted d-flex justify-content-center align-items-center">
    Designed and Developed by : Harsh Raj Ambastha
  </div>
        </div>
    )

【问题讨论】:

在一个可以被数千人阅读的问题中包含个人信息是不好的。 【参考方案1】:

您可以尝试使用 javascript 可选链:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining

尝试将运算符添加到您的每个字段:

userData?.name
userData?._id

等等

【讨论】:

【参考方案2】:

这是因为您将初始值设置为空,这将被解释为原始值。因此,当它最初呈现时,它发现您正在尝试访问不存在的原始值的属性。将初始值作为空对象,它将不再在这里抛出错误。 useState()

【讨论】:

谢谢,它解决了那个错误,但我仍然无法在我的 dom 上渲染它。我试图找出为什么会这样,在设置数据后我试图在控制台上记录 userData.name 它仍然显示未定义。有什么解决方案吗?在此先感谢:) 你在哪里使用 console.log(userData.name)。如果您可以在代码沙箱中进行设置,请提供链接。我可以看看 我所做的更改:const [userData,setUserData]=useState( _id: "", name: "", email: "", phone: "", work: "");常量数据=等待 res.json(); setUserData(data);[HERE I DID LOG]console.log(userData.name) useState() 就像一个等待操作。它不会立即更新您的状态。所以这是检查console.log(data)中是否有价值的一件事。如果您在数据中具有价值,那么您应该尝试使用单独的值而不是对象中的 useState。比如 const [name,setName], [email,setEmail] 等。然后分别设置。

以上是关于无法读取未定义的属性(读取“名称”):ReactJs的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 无法使用 --target 读取未定义的属性“名称”

Angular2:无法读取未定义的属性“名称”

过滤数据时错误无法读取未定义的属性名称字段名过滤器?

无法读取未定义 discord.js 的属性“名称”尝试读取 json 中的数组

无法读取未定义错误的属性“匹配”

遍历对象数组-TypeError:无法读取未定义的属性“名称”