首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将react-modal呈现为可重用组件

无法将react-modal呈现为可重用组件
EN

Stack Overflow用户
提问于 2018-07-25 03:52:01
回答 1查看 429关注 0票数 0

我有一个餐饮列表的应用程序,点击餐食应该会在屏幕上显示关于餐饮的进一步信息。

因此,我尝试使用react-modal包将一个基本的模态编码为一个可重用的组件。

然而,当我试图“激活”模式时,它不起作用。openModal方法确实会触发,但模式不会显示在屏幕上。

App.js:

代码语言:javascript
复制
import React from 'react';

import MealCard from './MealCard';
import MealModal from './MealModal';


export default class App extends React.Component {
  constructor() {
    super();
    this.state = {
      modalIsOpen: false
    }
    this.openModal = this.openModal.bind(this);

  };

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

  render() {
    return (
      <div>
        <div className="app-wrapper" style={{display: 'flex'}}>
          <div className="container">
            <div className="row">
              {[...Array(20)].map((x, i) =>
                  <div className="col-sm-6 col-xs-12 " key={i} onClick={this.openModal}>
                    <MealCard />
                  </div>
                )}
          </div>
        </div>
      </div>
      <MealModal isOpen={this.state.modalIsOpen}/>
    </div>
    );
  }
}

MealModal.js

代码语言:javascript
复制
import React from 'react';
import Modal from 'react-modal';

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

Modal.setAppElement('#app')

export default class MealModal extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      modalId: 0,
      modalIsOpen: false
    };

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

  componentWillMount() {
    this.setState({modalId: 3})
  }

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

  closeModal() {
    this.setState({modalIsOpen: false});
  }
  render() {
    return (
      <Modal
        isOpen={this.props.modalIsOpen}
        onRequestClose={this.closeModal}
        style={customStyles}
        contentLabel="Meal Modal"
      >
        <div className="modal-wrapper">
          <div className="container text-center">
            <h1>Hello</h1>
            <h2>ID of this modal is {this.state.modalId}</h2>
            <h3>This is an awesome modal.</h3>
            <button onClick={this.closeModal}>close</button>
          </div>
        </div>
      </Modal>
    )
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-25 03:55:22

您将isOpen作为props传递,并在MealModal组件中使用modalIsOpen (props)。

正如评论中提到的,您可以只使用isOpen={this.props.isOpen}。使用两个状态来服务于相同的目的是没有意义的,一个是App组件中的modalIsOpen,另一个是MealModel组件中的modalIsOpen

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51506531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档