javascript - 如何根据 cookie 在 GatsbyJS 中切换类?

标签 javascript reactjs cookies gatsby

我想为我的 Gatsby Hobby Page 做一个简单的 cookie 通知,而不使用额外的 cookie npm 包。

我使用“universal-cookie”npm 包成功设置了 cookie。当我点击同意横幅的“关闭”按钮时,我改变了状态,它确实隐藏了横幅。但是当我现在重新加载我的页面时,横幅仍然显示,即使 cookie 和状态设置正确(通过 console.log 检查)。

import React from 'react'
import Cookie from 'universal-cookie'

const cookie = new Cookie()

class CookieNotice extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      active: cookie.get('viewed_cookie_notice'),
    }
    this.toggleActiveClass = this.toggleActiveClass.bind(this)
  }

  componentDidMount() {
    this.setState({ active: cookie.get('viewed_cookie_notice') })
  }

  toggleActiveClass() {
    cookie.set('viewed_cookie_notice', true, { path: '/', expires: new Date(Date.now() + 2592000) })
    this.setState({ active: cookie.get('viewed_cookie_notice') })
  }

  render() {
    const { active } = this.state
    return (
      <div id="cookie-notice" className={active ? 'hidden' : null}>
          <button type="button" id="close-cookie" onClick={this.toggleActiveClass}>
            Close!
          </button>
        </div>
      </div>
    )
  }
}
export default CookieNotice

我只想永久隐藏 cookie 横幅,如果用户关闭了 cookie 横幅并且每次重新访问该页面时都不会向他显示。

最佳答案

在您的构造函数中,更改状态中 active 的值。

constructor(props) {
  super(props);
  this.state = { active: true };
}

通过将active的值设置为true,意味着当组件第一次加载时,banner会被隐藏,然后通过调用setStatecomponentDidMount 中,它会获取 cookie 的值,然后用正确的值重新渲染。

关于javascript - 如何根据 cookie 在 GatsbyJS 中切换类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56099339/

相关文章:

javascript - Angular 2 模板选择器未知

javascript - 有没有比构建字符串和设置 innerHTML 更好的填充 HTML 小部件的方法?

javascript - 组件渲染过早

javascript - Mithril 不会自动重绘 View

javascript - 捕获所有点击事件并丢弃不允许的

cookies - 使用 Jsoup 登录 Cookie?

javascript - 单击与 Chrome 和 IE 兼容的按钮即可跨浏览器文件下载?

reactjs - 与脉轮 react 不会触发 useEffect

ruby-on-rails-4 - Rails 4 - 在服务器上,如何列出从客户端发送的所有 cookie 及其值?

javascript - 在三元运算符中用 '.' 替换 ''