javascript - 如何访问未初始化的状态 Hook 的属性?

标签 javascript reactjs

如果状态尚未设置,如何安全地使用组件中的对象? 我将其初始化为 null(我可以使用 {},但这会导致其他影响)。我得到:

Cannot read property 'name' of undefined

const [user, setUser] = useState(null);
someService(user => setUser(user))
const someRef = useRef(null);

if (!user) {
    // to avoid the undefined user.name I tried this but it causes an issue with useRef (because the actual someRef is not rendered when !user
    return <p>loading user</p>
}

return (
    <div>
        <p>{user.name}</p>
        <div ref={someRef}>hello</div>
    </div>
)

工作示例:https://codesandbox.io/s/young-dust-y2z5k?fontsize=14&hidenavigation=1&theme=dark

此时,用户尚未创建,我们应该渲染“正在加载用户”,这很好,但 someRef 会导致问题,因为有消息,但组件未渲染。取消注释第 5 行和注释第 6 行以查看其工作情况

最佳答案

尝试:

const [user, setUser] = useState(null);
someService(user => setUser(user))

render(){
    return({user? <p>{user.name}</p> :<p>loading user</p>});
}

您可以在引用和用户更改上使用useEffect来设置另一个变量:

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>
    )
}

关于javascript - 如何访问未初始化的状态 Hook 的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61091755/

相关文章:

javascript - React 中的 JQuery 移动组件

javascript - JavaScript 可以向 Web 容器 Servlet 发送 HTTP 请求吗?

javascript - HTML5 canvas 中的简单加载动画

javascript - AngularJs 中的 Nick 验证 - 每秒对单个 HTTP 请求中的更改进行分组

javascript - React 检查 css 是否已使用 Webpack 和 React 加载

javascript - 如何使用 react Hook 在组件之间共享 Assets 请求?

javascript - 当用户单击时将复选框值传递到文本字段

javascript - 添加获取方向链接到 InfoWindow Google map V3

javascript - Javascript 中按键事件的限制

javascript - react : problems with . ..传播