亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法讀取 null 反應的屬性“#”

無法讀取 null 反應的屬性“#”

嚕嚕噠 2023-10-14 11:25:21
我對反應很陌生,我試圖從 firebase 數據庫加載個人資料圖片。即使該屬性不為 null,它仍然會顯示 TypeError: Cannot read property 'pfpUrl' of null。import React from "react"import { NavLink } from "react-router-dom";import { useState, useEffect } from "react"import firebase from "firebase";import fire from "./firebase"import { useHistory } from "react"function Header(){        const [pfp, setPfp] = useState(null)        const [userID, setUserID] = useState(null);        firebase.auth().onAuthStateChanged((user)=>{            if(user){                setUserID(user.uid)                firebase.database().ref("users/"+userID+"/public/profile/pic").on("value", (snapshot)=>{                    setPfp(snapshot.val().pfpUrl)                })            }else{                            }         })        function signOut(){            firebase.auth().signOut().then(()=>{                console.log("successfully signout")            })        }        return(            <header>                                <div id = "hd-container">                    <div id = "logo-contain">                        <NavLink to = "/"><h1>Logo</h1></NavLink>                    </div>                    <div id ="search">                        <div className = "bar">                            <input id = "searchBar" placeholder = "search"></input>                        </div>                        <div className = "searchBtn">                            <button id = "srhBtn">Search</button>                            </div>                                       </div>即使加載了個人資料圖片,錯誤仍然出現,有解決辦法嗎?
查看完整描述

2 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

您的使用setUserID(user.uid)不會立即導致userID變量包含新值。它只會在組件下次渲染時(而不是這次即將渲染)包含該新值。


如果您想在立即出現的數據庫查詢中使用用戶的 UID,則需要在本地使用它的值。


const uid = user.uid

setUserID(uid)

firebase.database().ref("users/"+ uid +"/public/profile/pic").on("value", (snapshot)=>{

    setPfp(snapshot.val().pfpUrl)

})

看到這uid是一個局部變量,其值可以立即在查詢中使用。


查看完整回答
反對 回復 2023-10-14
?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

首先,您需要在內部執行代碼useEffect,因為每當您設置狀態時,api 都會繼續觸發 api 調用。請參閱下面的代碼并嘗試在控制臺中顯示您的值以驗證其來自后端。


useEffect(() => {

    firebase.auth().onAuthStateChanged((user)=>{

            if(user){

                setUserID(user.uid)

                firebase.database().ref("users/"+user.uid+"/public/profile/pic").on("value", (snapshot)=>{

                    setPfp(snapshot.val().pfpUrl)

                })

            }else{

                

            } 

        })

}, [])


查看完整回答
反對 回復 2023-10-14
  • 2 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號