You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React:如何避免渲染时隐藏组件短暂显示?

问题:条件渲染时组件短暂闪现

在以下条件渲染逻辑中,即使userInfo.gardenName条件成立,CreateGarden组件仍会短暂显示1秒:

{userInfo.gardenName ?
  <ShowPlants />
  :
  <CreateGarden setModal={setModal} />
}

原获取用户信息的自定义Hook

获取userInfo使用的自定义Hook代码如下:

export default function useUserInfo() {
    const [userInfo, setUserInfo] = useState([]);
    const [categories, setCategories]= useState([]);

    const userRef = doc(allUsers,auth.currentUser.uid);

    useEffect(() => {  
       const unsub = onSnapshot(userRef, (doc)=>{
         setUserInfo(doc.data())
         setCategories(doc.data().categories)
         }) 

         return ()=>unsub()
      },[auth.currentUser]);

    return {userInfo, categories};
}

初次尝试无效

曾尝试在Hook中添加loading状态作为额外渲染条件,但问题依旧,仍会看到隐藏组件闪现。

最终解决方案

经过多次尝试,采用以下方案解决问题:

修改后的自定义Hook

export default function useUserInfo() {
    const [userInfo, setUserInfo] = useState({});
    const [loading, setLoading ] = useState(true);
    const [categories, setCategories]= useState([]);

    const userRef = doc(allUsers,auth.currentUser.uid);

    useEffect(() => {  
       const unsub = onSnapshot(userRef, (doc)=>{
         setUserInfo(doc.data())
         setCategories(doc.data().categories)
         }) 
         setLoading(false)
       
         return ()=>unsub()
      },[auth.currentUser]);
  
    return {userInfo, categories, loading};
}

组件中更新渲染逻辑

{userInfo.gardenName && <ShowPlants />}

{!userInfo.gardenName && !loading && <CreateGarden setModal={setModal} />}

内容的提问来源于stack exchange,提问作者user19487188

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 11:06:21