javascript - 当我在 React 中按下按钮时,我该如何做到只出现一个特定的模式?

标签 javascript reactjs

目前正在尝试在 React 中制作模式,并希望制作一个网格,其中“按钮 1”显示“模式 1”,“按钮 2”显示“模式 2”等。 当我按下我的按钮以显示模态时,它同时显示模态 1 和模态 2。如何设置它以便按钮 1 仅打开模态 1?

这是我的 App.js:

import React from 'react';
import './main.css';
import Modal from './components/Modal/modal';

class App extends React.Component {
  state = {
    show: false
  };

  showModal = x => {
    this.setState({
      show: !this.state.show
    });
  };

  render() {
    return (
      <div>
        <div className="button-container">
          <button className="toggle-button" onClick={x => {
            this.showModal(x);
          }}>Show yourself Modal!</button>
        </div>
        <Modal onClose={this.showModal} show={this.state.show} title="Test modal 1" id="1">Lorem ipsum</Modal>
        <Modal onClose={this.showModal} show={this.state.show} title="Test modal 2" id="2">I am a different modal</Modal>
      </div>
    );
  }
}

export default App;

这是我的 modal.js 组件:

import React, { Component } from 'react';
import PropTypes from 'prop-types';
import './modal.css';

export default class Modal extends Component {
    onClose = x => {
        this.props.onClose && this.props.onClose(x);
    };

    render() {
        if(!this.props.show) {
            return null;
        }

        return (
            <div className="modal-wrapper">
                <h2 className="modal-header">{this.props.title}</h2>
                <div>{this.props.children}</div>
                <div>
                    <button className="modal-close" onClick={this.onClose}></button>
                </div>
            </div>
        )
    }
}

Modal.propTypes = {
    onClose: PropTypes.func.isRequired,
    show: PropTypes.bool.isRequired
};

最佳答案

最简单的方法是向您的状态添加第二个键,这样您就可以独立管理显示两种模式。

class App extends React.Component {
  state = {
    show1: false,
    show2: false
  };

然后使您的更改函数成为接受参数以更新状态的正确部分的柯里化(Currying)函数。为了使用变量访问对象键,我们需要像这样以数组形式访问它:

  showModal = (modal) => (e) => {
    this.setState({
      [modal]: !this.state[modal]
    });
  };

然后像这样使用它:

  render() {
    return (
      <div>
        <div className="button-container">
          <button className="toggle-button" onClick={this.showModal('show1')}>Show yourself Modal 1!</button>
          <button className="toggle-button" onClick={this.showModal('show2')}>Show yourself Modal 2!</button>
        </div>
        <Modal onClose={this.showModal('show1')} show={this.state.show1} title="Test modal 1" id="1">Lorem ipsum</Modal>
        <Modal onClose={this.showModal('show2')} show={this.state.show2} title="Test modal 2" id="2">I am a different modal</Modal>
      </div>
    );
  }
}

关于javascript - 当我在 React 中按下按钮时,我该如何做到只出现一个特定的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58591594/

相关文章:

javascript - 如何在 Textmate 中创建自定义符号列表项?

javascript - useState(function_name)、useState(function_name())、useState(()=>function_name()) 和 useState(()=>function_name) 之间有什么区别?

javascript - 在 React Native 中管理字符串的最佳方法

javascript - 如何使用 Uber 的 "react-map-gl"库绘制静态标记?

reactjs - React 功能组件中的 lodash debounce 不起作用

reactjs - 空类名

javascript - 将带/不带分隔符的输入数字转换为整数

javascript - 当用户单击/移出文本框时删除错误验证消息

Javascript 无法在 IE 中提供正确的输出

javascript - Jest/Babel 找不到没有路径前缀的模块