Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如果用户已订阅React(本地存储),则不再显示弹出窗口_Reactjs_Modal Dialog_Popup_Local Storage - Fatal编程技术网

Reactjs 如果用户已订阅React(本地存储),则不再显示弹出窗口

Reactjs 如果用户已订阅React(本地存储),则不再显示弹出窗口,reactjs,modal-dialog,popup,local-storage,Reactjs,Modal Dialog,Popup,Local Storage,1秒后弹出窗口显示。但我需要通过使用localStorage,仅向尚未订阅的用户显示它。我确实尝试过像下面的代码那样使用本地存储,但当显示/不显示弹出窗口时,我得到的只是一个空白的白色页面。我编码的本地存储完全错了吗?请帮忙 import React from 'react' import styled from 'react-emotion' import Rodal from 'rodal' import '../styles/rodal.css' import Delayed from '

1秒后弹出窗口显示。但我需要通过使用localStorage,仅向尚未订阅的用户显示它。我确实尝试过像下面的代码那样使用本地存储,但当显示/不显示弹出窗口时,我得到的只是一个空白的白色页面。我编码的本地存储完全错了吗?请帮忙

import React from 'react'
import styled from 'react-emotion'
import Rodal from 'rodal'
import '../styles/rodal.css'
import Delayed from '../components/Delayed'

const Signup = () => (
  <Containers>
    <SubsribtionForm
      action="https://subscribe/post?/....."
      method="post"
    >
      <SubscribeInput type="email" name="EMAIL" placeholder="Subscribe to Updates!" required />
      <Button type="submit" onClick={this.submit}>Add Me</Button>
    </SubsribtionForm>
  </Containers>
)

export default class Popup extends React.Component {
  constructor(props) {
    super(props)
    this.state = { visible: true }

    if (localStorage.getItem('submit')) {
      this.setState({ visible: false })
    }
    this.submits = this.submits.bind(this)
  }

  submits() {
    const newsub = this.state.submit
    localStorage.setItem('submit', newsub)
  }

  show() {
    this.setState({ visible: true })
  }

  hide() {
    this.setState({ visible: false })
  }

  render() {
    return (
      <div>
        <Container>
          <Delayed waitBeforeShow={1000}>
            <Rodal
              visible={this.state.visible}
              onClose={this.hide.bind(this)}
              width={500}
              height="100%"
              customStyles={customStyles}
            >
              <Box>
                <Banner />
                <ContainerContent>
                  <Header>Subscribe to our mailing list</Header>
                  <Words>
                    We will organize and send regular updates Stay informed!
                  </Words>
                </ContainerContent>
                <ContainerForm>
                  <Signup />
                </ContainerForm>
              </Box>
            </Rodal>
          </Delayed>
        </Container>
      </div>
    )
  }
}
从“React”导入React
导入样式来自“反应情绪”
从“Rodal”导入Rodal
导入“../styles/rodal.css”
从“../components/Delayed”导入延迟
常量注册=()=>(
加我
)
导出默认类弹出窗口扩展React.Component{
建造师(道具){
超级(道具)
this.state={visible:true}
if(localStorage.getItem('submit')){
this.setState({visible:false})
}
this.submits=this.submits.bind(this)
}
提交(){
const newsub=this.state.submit
localStorage.setItem('submit',newsub)
}
show(){
this.setState({visible:true})
}
隐藏(){
this.setState({visible:false})
}
render(){
返回(
订阅我们的邮件列表
我们将定期组织和发送更新,并随时通知您!
)
}
}
只需检查
submit
是否不是空的,如上所述

另一种方法是在componentDidMount生命周期中执行以下操作

componentDidMount() {
   if (localStorage.getItem('submit')) {
     this.setState({ visible: false })
   }
}

您正在类构造函数内调用this.setState,可以在this.state中使用简单的条件直接赋值,请在构造函数中使用绑定:D。我使用长度,因为如果字符串为“”,则长度为0,则条件中的值为false

import React from 'react'
import styled from 'react-emotion'
import Rodal from 'rodal'
import '../styles/rodal.css'
import Delayed from '../components/Delayed'

const Signup = () => (
  <Containers>
    <SubsribtionForm
      action="https://subscribe/post?/....."
      method="post"
    >
      <SubscribeInput type="email" name="EMAIL" placeholder="Subscribe to Updates!" required />
      <Button type="submit" onClick={this.submit}>Add Me</Button>
    </SubsribtionForm>
  </Containers>
)

export default class Popup extends React.Component {
  constructor(props) {
    super(props)
    const submit = localStorage.getItem('submit')
    this.state = { visible: !submit && !submit.length }
    this.submits = this.submits.bind(this)
    this.show = this.show.bind(this)
    this.hide = this.hide.bind(this)

  }

  submits() {
    const newsub = this.state.submit
    localStorage.setItem('submit', newsub)
  }

  show() {
    this.setState({ visible: true })
  }

  hide() {
    this.setState({ visible: false })
  }

  render() {
    return (
      <div>
        <Container>
          <Delayed waitBeforeShow={1000}>
            <Rodal
              visible={this.state.visible}
              onClose={this.hide}
              width={500}
              height="100%"
              customStyles={customStyles}
            >
              <Box>
                <Banner />
                <ContainerContent>
                  <Header>Subscribe to our mailing list</Header>
                  <Words>
                    We will organize and send regular updates Stay informed!
                  </Words>
                </ContainerContent>
                <ContainerForm>
                  <Signup />
                </ContainerForm>
              </Box>
            </Rodal>
          </Delayed>
        </Container>
      </div>
    )
  }
}
从“React”导入React
导入样式来自“反应情绪”
从“Rodal”导入Rodal
导入“../styles/rodal.css”
从“../components/Delayed”导入延迟
常量注册=()=>(
加我
)
导出默认类弹出窗口扩展React.Component{
建造师(道具){
超级(道具)
const submit=localStorage.getItem('submit')
this.state={visible:!submit&&!submit.length}
this.submits=this.submits.bind(this)
this.show=this.show.bind(this)
this.hide=this.hide.bind(this)
}
提交(){
const newsub=this.state.submit
localStorage.setItem('submit',newsub)
}
show(){
this.setState({visible:true})
}
隐藏(){
this.setState({visible:false})
}
render(){
返回(
订阅我们的邮件列表
我们将定期组织和发送更新,并随时通知您!
)
}
}

不要在构造函数中调用
this.setState
,只需正确初始化
this.state
构造函数(props){super(props)this.state={visible:true}if(localStorage.getItem('submit'){this.state({visible:false}}})this.submits=this.submits.bind(this)}它没有改变任何东西:(我想知道为什么它仍然不起作用。onClick={this.submit}我想这可能是原因之一,还有其他原因。有什么办法可以做到这一点吗?使用cookies?我想知道怎么做
import React from 'react'
import styled from 'react-emotion'
import Rodal from 'rodal'
import '../styles/rodal.css'
import Delayed from '../components/Delayed'

const Signup = () => (
  <Containers>
    <SubsribtionForm
      action="https://subscribe/post?/....."
      method="post"
    >
      <SubscribeInput type="email" name="EMAIL" placeholder="Subscribe to Updates!" required />
      <Button type="submit" onClick={this.submit}>Add Me</Button>
    </SubsribtionForm>
  </Containers>
)

export default class Popup extends React.Component {
  constructor(props) {
    super(props)
    const submit = localStorage.getItem('submit')
    this.state = { visible: !submit && !submit.length }
    this.submits = this.submits.bind(this)
    this.show = this.show.bind(this)
    this.hide = this.hide.bind(this)

  }

  submits() {
    const newsub = this.state.submit
    localStorage.setItem('submit', newsub)
  }

  show() {
    this.setState({ visible: true })
  }

  hide() {
    this.setState({ visible: false })
  }

  render() {
    return (
      <div>
        <Container>
          <Delayed waitBeforeShow={1000}>
            <Rodal
              visible={this.state.visible}
              onClose={this.hide}
              width={500}
              height="100%"
              customStyles={customStyles}
            >
              <Box>
                <Banner />
                <ContainerContent>
                  <Header>Subscribe to our mailing list</Header>
                  <Words>
                    We will organize and send regular updates Stay informed!
                  </Words>
                </ContainerContent>
                <ContainerForm>
                  <Signup />
                </ContainerForm>
              </Box>
            </Rodal>
          </Delayed>
        </Container>
      </div>
    )
  }
}