javascript - 登录 React 后关闭模态

标签 javascript reactjs react-modal

我必须在模式中使用我的 Login.js 组件:在第一个中,模式不应在登录后关闭;在第二个中,它必须关闭。

我想弄清楚如何处理第二种情况:我尝试了这个但它不起作用:我在父级中编写了一个 closeAfterLogin 方法并尝试在子级中触发它。

登录.js:

import React from 'react';
import { Meteor } from 'meteor/meteor';

export default class LoginForm extends React.Component {
  constructor() {
    super();

    this.login = this.login.bind(this);
  }


  login(e){
    e.preventDefault();
    let email = this.refs.email.value.trim();
    let password = this.refs.password.value.trim();
    Meteor.loginWithPassword({email}, password, err =>{
      console.log('Login Callback', err);
    })
    if (!!this.props.closeAfterLogin) {
      this.props.closeAfterLogin
    }
  }

  render() {
    return (
      <div>
        <form onSubmit={this.login}>
          <div className="form-group">
            <input type="email" ref="email" className="form-control" id="login-form-input-email" placeholder="email"/>
          </div>
          <div className="form-group">
            <input type="password" ref="password" className="form-control" id="login-form-input-password" placeholder="mot de passe"/>
          </div>
          <button type="submit" className="btn btn-primary">Connexion</button>
        </form>
        <p>Pas encore de compte ? <a onClick={this.props.toggleHasAnAccount}>Inscrivez-vous</a></p>
      </div>
    );
  }
}

父组件:

import React from 'react';
import Modal from 'react-modal';
import { Meteor } from 'meteor/meteor';

import LoginForm from './LoginForm';
import SignUpForm from './SignUpForm';

const customStyles = {
  content : {
    top                   : '50%',
    left                  : '50%',
    right                 : 'auto',
    bottom                : 'auto',
    marginRight           : '-50%',
    transform             : 'translate(-50%, -50%)'
  }
};

Modal.setAppElement('#app')

export default class LoginModalParent extends React.Component {
  constructor() {
    super();

    this.state = {
      modalIsOpen: false,
      hasAnAccount: true
    };

    this.openModal = this.openModal.bind(this);
    this.closeModal = this.closeModal.bind(this);
    this.toggleHasAnAccount = this.toggleHasAnAccount.bind(this);
    this.closeAfterLogin = this.closeAfterLogin.bind(this);
  }

  openModal() {
    this.setState({modalIsOpen: true});
  }

  closeModal() {
    this.setState({modalIsOpen: false});
  }

    toggleHasAnAccount() {
    this.setState(prevState => ({
      hasAnAccount: !prevState.hasAnAccount
    }));
  };

  closeAfterLogin() {
    this.setSate({modalIsOpen: false});
    console.log(this.state.modalIsOpen);
  }

  render() {
    return (
      <div>
        <Modal
          isOpen={this.props.modalIsOpen}
          onRequestClose={this.props.closeModal}
          style={customStyles}
          contentLabel="Example Modal"
        >
          <button onClick={this.props.closeModal} type="button" className="close" aria-label="Close">
            <span aria-hidden="true">&times;</span>
          </button>
          { this.state.hasAnAccount ? (
            <LoginForm toggleHasAnAccount={this.toggleHasAnAccount} closeAfterLogin={this.closeAfterLogin}/>) : (
            <SignUpForm toggleHasAnAccount={this.toggleHasAnAccount} />)
          }
        </Modal>
      </div>
    );
  }
}

有什么想法吗?

最佳答案

您没有调用 closeAfterLogin 属性函数。在名称后添加 () 以调用它。

login(e){
  e.preventDefault();
  let email = this.refs.email.value.trim();
  let password = this.refs.password.value.trim();
  Meteor.loginWithPassword({email}, password, err =>{
    console.log('Login Callback', err);
  });
  if (!!this.props.closeAfterLogin) {
    this.props.closeAfterLogin();
  }
}

关于javascript - 登录 React 后关闭模态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51556334/

相关文章:

javascript - 使用 javascript 在 HTMLInput 的字符串上添加一个字符

reactjs - ComponentDidMount() 中 Axios 请求的 Jest/Enzyme 单元测试

javascript - React 状态之外的连接函数

javascript - 单击表行时使用 React 门户显示模式组件(?)

reactjs - Flask 和 React - Spotify 授权后处理 token

javascript - react 响应模式 : Change background-color when modal is open

javascript - 谷歌地图标记标题不显示

javascript - 在两个功能之间切换

javascript - 选中/取消选中复选框时更改相应标签的文本

javascript - ComponentDidMount 代码即使在组件卸载后仍执行