Javascript 如何访问´;它没有初始化吗?
如果尚未设置状态,如何在组件中安全使用对象? 我将其初始化为null(我可以使用{},但这会导致其他效果)。我得到: 无法读取未定义的属性“name”Javascript 如何访问´;它没有初始化吗?,javascript,reactjs,Javascript,Reactjs,如果尚未设置状态,如何在组件中安全使用对象? 我将其初始化为null(我可以使用{},但这会导致其他效果)。我得到: 无法读取未定义的属性“name” const[user,setUser]=useState(null); someService(用户=>setUser(用户)) const someRef=useRef(null); 如果(!用户){ //为了避免未定义的user.name,我尝试了这个方法,但是它导致了useRef的问题(因为当!user!时,实际的someRef没有呈现)
const[user,setUser]=useState(null);
someService(用户=>setUser(用户))
const someRef=useRef(null);
如果(!用户){
//为了避免未定义的user.name,我尝试了这个方法,但是它导致了useRef的问题(因为当!user!时,实际的someRef没有呈现)
返回加载用户
}
返回(
{user.name}
你好
)
工作示例:
此时未创建用户,我们应呈现“正在加载的用户”。这很好,但someRef会导致问题,因为存在消息,但组件未呈现。请取消注释第5行和注释第6行,以查看其工作情况。请尝试:
const [user, setUser] = useState(null);
someService(user => setUser(user))
render(){
return({user? <p>{user.name}</p> :<p>loading user</p>});
}
假设
render
是一个return
的输入错误,这似乎应该可以工作。请提供一个显示问题和您试图获取name
的user
对象的示例。对此表示抱歉。删除了大量代码以说明错误,并且发生了错误。我更新了示例。我正在做的是c由于useref出现问题,您的代码看起来无效。无法返回两个HTML节点子项。请显示您正在运行的实际代码。此外,我不知道ref与user
上的undef属性name
有什么关系。完成。我现在更改了它,非常抱歉,谢谢,但仍然不清楚如何处理它。错误在哪里/是什么huseRef
?请阅读链接。如果我们无法重现问题,则无法提供帮助。您好。是的,这是我的第一个方法,但这导致了我的useRef出现问题(问题已更新)
const [user, setUser] = useState(null);
someService(user => setUser(user))
render(){
return({user? <p>{user.name}</p> :<p>loading user</p>});
}
import React, { useState, useEffect } from 'react'
export default function Test() {
const [user, setUser] = useState(null);
const someRef = useRef(null);
const [loaded, setLoaded] = useState(false);
useEffect(() => {
if (user && someRef) {
setLoaded(true)
}
}, [user, someRef])
return (
loaded ?
<div>
<p>{user.name}</p>
<div ref={someRef}>hello</div>
</div> : <div>not loaded yet</div>
)
}