javascript - React Helmet 动态类相互覆盖

标签 javascript reactjs react-helmet

我正在尝试在 body 标记上有条件地设置一个类。就其本身而言,这是微不足道的,不是问题,但是当有多个组件时,有条件地同时写入 body 标记的类属性,它们开始相互覆盖。只有其中之一保持活跃,而其他的则被忽略。示例:

//Sidebar.js

const Sidebar = () => (
  // ...
  <Helmet>
    <body className={menuOpen ? 'blur' : ''} />
  </Helmet>
  // ...
);

//Loader.js

const Loader = () => (
  // ...
  <Helmet>
    <body className={isLoading ? 'hidden' : ''} />
  </Helmet>
  // ...
);

在此示例中,侧边栏必须在事件时通过在 body 标记上设置一个类来禁用滚动(并出于设计目的模糊页面)。加载器需要在事件时禁用滚动(它是全屏预加载器)。这里侧边栏组件优先,Loader 组件中的 Helmet 标签被忽略。

我怎样才能做到这一点?

编辑:当然,我可以只使用 DOM API 并手动设置/删除类,这就是我目前正在做的事情,但想知道是否有更多的 react 方式来做到这一点。

最佳答案

class 属性中维护所需项目的数组,然后使用 helmet 应用该数组

关于javascript - React Helmet 动态类相互覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59119715/

相关文章:

javascript - Google map 信息窗口仅显示第一次点击的信息

reactjs - 如何在React中正确更新<select multiple ...>?

css - 使用 webpack 更改 react-bootstrap Navbar 的文本颜色

node.js - 在 renderStatic 期间 react Helm 混合场

reactjs - Gatsby React-helmet 不是服务器端渲染

reactjs - 使用 Helmet 在 Gatsby 中包含外部 javascript

javascript - jquery silde 效果隐藏完整页面

javascript - 如何仅在第一级将对象映射到数组。 JS

reactjs - React.js 需要服务器端吗?

javascript - Three.js:逐步增加纹理分辨率的策略