簡體   English   中英

如何在React中渲染的按鈕單擊時關閉?

[英]How do I close upon button click of a rendered component in react?

我在弄清楚如何關閉渲染的組件時遇到麻煩。 目前,我能夠在第一頁上打開模式組件,但隨后我想在通過該組件單擊按鈕時將其關閉。 我該怎么辦?

import React, { Component } from 'react';
  import AddModal from './addmodal';

  class Page extends Component {
    constructor(){
      super();
      this.state = { isModalOpen: false };
    }
    ...//skip
    handleAdd= () =>{
      this.setState({ isModalOpen: true });
    }
    render(){
      return (
        <div>
          <button onClick={this.handleAdd} > Add </button>
          <AddModal isOpen={this.state.isModalOpen} />
        </div>
        )
    }
  }


  import React, { Component } from 'react';

  class AddModal extends Component {
    // ... skip

  handleClose = () => {
    this.setState({ open: false });
  };

    render(){
      return(
        <modal inOpen={this.props.isOpen} >
        <Button onClick={this.handleClose}>
          Okay
        </Button>
          ...//skip
        </modal>
      )
    }
  }

  export default AddModal;

您需要使模態組件調用onClose回調,以便父級可以將其關閉:

import React, { Component } from 'react';
  import AddModal from './addmodal';

  class Page extends Component {
    constructor(){
      super();
      this.state = { isModalOpen: false };
    }
    ...//skip
    handleAdd= () =>{
      this.setState({ isModalOpen: true });
    }
    handleClose= () =>{
      this.setState({ isModalOpen: false });
    }
    render(){
      return (
        <div>
          <button onClick={this.handleAdd} > Add </button>
          <AddModal isOpen={this.state.isModalOpen} handleClose={this.handleClose}/>
        </div>
        )
    }
  }


  import React, { Component } from 'react';

  class AddModal extends Component {
    // ... skip

    render(){
      return(
        <modal inOpen={this.props.isOpen} >
        <Button onClick={this.props.handleClose}> // call to parent
          Okay
        </Button>
          ...//skip
        </modal>
      )
    }
  }

  export default AddModal;

父組件將決定模態是否打開,因此它擁有子項的狀態。

基於@jsdeveloper發布的內容,我認為你可以通過使用相同的函數來處理模態的打開和關閉來減少混亂。

我們將使用的toggleModal功能,改變了isModalOpentrue當它是false ,反之亦然。 它使用一個回調,該回調采用isModalOpen的先前狀態值。

toggleModal = () => {
  this.setState(prevState => ({
    isModalOpen: !prevState.isModalOpen
  }))
}

因此,最終文件應如下所示。

import React, { Component } from 'react';
import AddModal from './addmodal';

class Page extends Component {
  constructor() {
    super();
    this.state = {
      isModalOpen: false
    };
  }
  // ... //skip
  toggleModal = () => {
    this.setState((prevState) => ({
      isModalOpen: !prevState.isModalOpen
    }));
  };

  render() {
    return (
      <div>
        <button onClick={this.handleAdd}> Add </button>{' '}
        <AddModal
          isOpen={this.state.isModalOpen}
          toggleModal={this.toggleModal}
        />
      </div>
    );
  }
}

import React, { Component } from 'react';

class AddModal extends Component {
  // ... skip

  render() {
    return (
      <modal inOpen={this.props.isOpen}>
        <Button onClick={this.props.toggleModal}>Close</Button>
        //... skip
      </modal>
    );
  }
}

export default AddModal;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM