程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何打开列表内的不同模式?

发布于2023-03-24 16:14     阅读(521)     评论(0)     点赞(24)     收藏(1)


我正在使用 React 并有一个包含图像的列表,当将它们悬停时它会显示一个文本,当单击它时它会打开一个模态,但每个“li”在模态中都有不同的内容。问题是列表中的每一项都只打开一个模态,最后一个,我该怎么做才能打开正确的模态?

模态代码

constructor(props) {
      super(props);
      this.state = {
          visible : false
      }
    }

    openModal() {
        this.setState({
            visible : true,
        });
    }

    closeModal() {
        this.setState({
            visible : false,
        });
    }

列出模态

<li className="bor">
      <img src={bor}/>
      <span className="first">teste</span>
      <span className="second">veja o case completo</span>
       <input type="button" onClick={() => this.openModal()} />
       <section>
        <Modal className="modal" visible={this.state.visible}       width="90%" height="90%" effect="fadeInUp" onClickAway={() =>   this.closeModal()}>
           <div className="close">
            <a href="javascript:void(0);" onClick={() => this.closeModal()}>X</a>
            </div>
            <div>
             <h1>teste1</h1>
            </div>
          </Modal>
         </section>
                  </li>
 <li className="baz">
     <img src={baz}/>
     <span className="first">teste2</span>
     <span className="second">veja o case completo</span>
     <input type="button" onClick={() => this.openModal()} />
     <section>
       <Modal className="modal" visible={this.state.visible} width="90%" height="90%" effect="fadeInUp" onClickAway={() => this.closeModal()}>
        <div className="close">
            <a href="javascript:void(0);" onClick={() => this.closeModal()}>X</a>
         </div>
         <div>
           <h1>teste2</h1>
          </div>
        </Modal>
       </section>
   </li>

解决方案


正如@FatemehQasemkhani 所说,最好的做法是使用单一模式并传递如下所示的相应数据。我以同样的方式接近并且工作正常。我正在项目中获取一些虚拟数据。每当用户单击任何列表(li)项目时,我都会将当前单击的项目存储在 activeItemData 中,并以模式传递该值。

import React, { Component } from "react";
import Modal from "react-awesome-modal";

class ProList extends Component {
     constructor(props) {
      super(props);
      this.state = {
         visible: false,
         activeItemData: "",
         items: [
           {
              desc: "this is item 1 "
           },
           {
              desc: "this is item 2"
           }
         ]
       };  
     }

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


     handleCurrentItem = item => {
         // you can set two properties in setState or you can set visible property in callback also...
        this.setState(
         {
           activeItemData: item.desc,
           visible:true
         },
         // () => this.setState({ visible: true })
        )
     };

     render() { 

         return (

              <div>

                  <ul>
                     { this.state.items.map(item => (
                        <li key={item.desc} onClick={() => this.handleCurrentItem(item)}>
                           {item.desc}
                        </li>
                     ))}
                  </ul>

                 <Modal
                     className="modal"
                     visible={this.state.visible}
                     width="90%"
                     height="90%"
                     effect="fadeInUp"
                     onClickAway={() => this.closeModal()}
                 >

                         <div className="close">
                             <a href="javascript:void(0);" onClick={() => this.closeModal()}>
                                  X
                             </a>
                         </div>
                         <div>
                              <h1>{this.state.activeItemData}</h1>
                         </div>
                 </Modal>
              </div>

         )

     }
}



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.qianduanheidong.com/blog/article/516807/ce22c4c9fcc9519cacc9/

来源:前端黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

24 0
收藏该文
已收藏

评论内容:(最多支持255个字符)