【发布时间】:2021-03-15 20:48:05
【问题描述】:
我使用onGetAccount函数获取登录用户的地址:
const [userWalletInfo, setUserWalletInfo] = useState()
async function onGetAccount() {
const account = await client.api.asset.getAccount();
return account;
}
useEffect(() => {
async function fetchUserWalletInfo() {
const address = await onGetAccount();
setUserWalletInfo({
address: address,
});
}
fetchUserWalletInfo();
}, []);
这样我就可以访问userWalletInfo.address。
问题是,如果我加载组件,然后(我的意思是当组件在本地主机上运行时,我在 VSCode 中编辑代码,我这样做是为了了解地址是否设置正确)我编辑 js。 文件添加:
<div> {userWalletInfo.address} </div>
它正确显示用户地址,但如果我刷新页面,我会得到“TypeError: Cannot read property 'address' of undefined”。
由此我推断页面是在fetchUserWalletInfo()用完之前渲染的。
【问题讨论】:
-
您可以使用安全导航运算符:{userWalletInfo?.address}。你的问题到底是什么?
-
它工作,你能解释一下为什么吗?我的意思是
?是干什么用的? -
?是可选的链接运算符。它基本上像if语句一样工作。即如果存在userWalletInfo对象,则检索address属性。我在下面的回答中也解释过。 -
另外,
?是 ES 2020 语法,因此您需要确保使用 Bable 来填充它。如果您使用的是 create react app、NextJS 或类似的东西,您很可能不需要担心这一点,但如果您从头开始配置 React 应用程序,则需要在发布之前记住这一点 -
?.运算符通常被称为“可选链运算符”。它只是一种语法糖,在访问其属性之前对左侧操作数执行空值检查,因此您不会像您遇到的那样遇到运行时错误。
标签: javascript node.js reactjs asynchronous fetch