首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React Hook未更新条件组件

React Hook未更新条件组件
EN

Stack Overflow用户
提问于 2021-03-04 04:56:13
回答 1查看 54关注 0票数 1

感谢您的时间,如果这个问题已经被问到了,很抱歉,但老实说,我没有找到任何解决方案。我是React上的新手,我正在尝试创建一个网站组合,我完成了我的项目,但现在我正在尝试实现一个旋转加载器,同时我的视频背景正在加载。为了更好地解释这个问题,我将简化代码。这是我的课程

代码语言:javascript
复制
function App() {

  const [isLoading, setIsLoading] = useState(true);

  return isLoading ? (
      <LoaderContainer>
          <Loader type="Puff" color="rgb(241, 113, 27)" height={100} width={100} />
      </LoaderContainer>
  ) : (
      <Router>
         <Home isLoading={isLoading} setIsLoading={setIsLoading} />
      </Router>
  );
  }

  export default App;

  //HOME functional component-------------------

  const Home = ({ isLoading, setIsLoading }) => {

  return (
    <>
      //...other components
      <HeroSection isLoading={isLoading} setIsLoading={setIsLoading} />
      //...other components
    </>
  );
  };

  export default Home;

现在.。在HeroSection中,有一个视频中有这个选项:“onLoadStart={() => setIsLoading(false)}”这个选项可以正常工作,但不适用于使用路由器更新LoaderContainer。我现在真的不知道为什么。如果我试着把一个带计时器的useEffect放入应用程序中,并尝试更新isLoading,它工作得很好!此外,在HomeContainer内部使用isLoading来呈现字符串,并且它正在正确更新!似乎条件语句中的isLoading不会重新呈现组件,但仅当从子(主页)调用setIsLoading时才会重新呈现组件。

感谢所有人的支持!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-04 08:52:52

因为在这种情况下有一个无限循环: isLoading === true -> Home not render -> onLoadStart not trigger ->没有机会设置isLoading false -> ...

即使在加载过程中,您也无法避免呈现<HeroSection/>,因为HeroSection负责终止加载。因此,解决方案将是控制不透明度或堆叠上下文,使<Home/>在开始时不可见,而不是完全不呈现

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66464805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档