簡體   English   中英

如何從 Reactjs 中的 useEffect 鈎子訪問道具

[英]How to access props from useEffect hook in Reactjs

我正在從新聞 API 獲取數據並在完成后將其存儲在我的狀態中,然后還將狀態值作為道具傳遞給子組件。

API 返回的數據是一個對象數組。 我只想將該數組(現在處於我的狀態)的一個元素(對象)傳遞給我的子組件。 因此,我通過使用數組常規遍歷方法 ([]) 傳遞一個元素來做到這一點,但不幸的是,當我嘗試在子組件中使用 useEffect 鈎子來控制台記錄道具(有效)時,我無法從鈎子或組件主體訪問我的元素(對象)的屬性,因為它一直告訴我它未定義,並且我必須在 useEffect 清理函數中取消所有訂閱和異步任務。 因此,我嘗試使用 splice 方法將該元素作為數組傳遞,以便使用 map 方法(有效)從子組件遍歷,但是,我仍然無法從 useEffect 鈎子訪問屬性。

父組件 (Home.js)

 ...
const [data, setData]= useState([])
 useEffect(()=>{

        const fetch= async()=>{
            const response= await axios(url)
            const results= response.data
            setData(results.articles.slice(0,5))
        }
        fetch()

    },[url])

return(
    <>
    <Categories onClick={fetchCategory}/>
    <section className={classes.latest}>
    <Vertical postArray={data.slice(0,1)} postObject={data[0]}/>
    </section>
    </>
)
}

export default Home

子組件(Vertical.js)

const Vertical=(props)=>{

useEffect(() => {
    // console.log('postArray',props.postArray.title)
    console.log('postObject',props.postObject.title)

}, )

return(
    <>
    {/* <article key={props.postObject.content} className={classes.article}>
        <figure className={classes.article_figure}>
            <img src='' alt="article alternative"/>
        </figure>
        <div className={classes.article_details}>
            <h2>{props.postObject.title}</h2>
            <p>{props.postObject.description}</p>

        </div>
    </article> */}
    {props.postArray.map(post=>(
        <article key={post.content} className={classes.article}>
        <figure className={classes.article_figure}>
            <img src='' alt="article alternative"/>
        </figure>
        <div className={classes.article_details}>
            <h2>{post.title}</h2>
            <p>{post.description}</p>

        </div>
    </article>
    ))}
    </>
)
}

export default Vertical

這樣做的原因是我需要訪問傳遞對象內的 URL,以便讓另一個 URL 獲取該帖子的縮略圖。

您需要為 useEffect 提供依賴項,以便觀察和控制它

useEffect(() => {
    // console.log('postArray',props.postArray.title)
    console.log('postObject',props.postObject.title)

},[props.postObject.title]) //this will ensure that this prop is watched for changes

編輯:對於所有未定義錯誤的人,您可以在依賴項中進行以下更改

useEffect(() => {
        // console.log('postArray',props.postArray.title)
        console.log('postObject',props?.postObject?.title) // optional-chaining would take care of the undefined check 
    
    },[props?.postObject?.title]) // optional-chaining would take care of the undefined check 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM