javascript - 如何在打开模态时更新图像src

标签 javascript reactjs graphql gatsby

我有这个类组件,我正在使用 GraphQL 从 JSON 文件获取数据。一切都按预期工作,但我发现在 Modal 组件打开时很难更新其内部的图像 src 。数据似乎没有传递到模态,并且它为所有卡片显示相同的图像。如果我尝试使用 props,它会在 image.src 中返回未定义。

任何关于如何解决这个问题的想法或帮助都会很棒!

我的代码:

import React from "react"
import { StaticQuery, graphql } from 'gatsby'
import { Container, Row, Col } from 'react-grid-system'
import Modal from 'react-responsive-modal'



class ProjectsList extends React.Component {
  constructor(props) {
    super(props)
    this.state = { 
      open: false,
    }
  }

  onOpenModal = () => {
    this.setState({ open: true, modalImage: this.props  });
  };

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

  render() {

    const projects = this.props;
    const { open } = this.state;

    return(
      <div>
        <Row>
          {projects.projects.map(item =>(

            <Col md={6} key={item.id}>
            <div className="project-card">
              <div className="project-img-wrap">
              <img src={item.image.src.publicURL} alt="projects" onClick={this.onOpenModal} />
              </div>
              <div className="project-text-wrap">
              <span className="project-title">{item.title}</span>
              </div>
            </div>
            <Modal open={open} onClose={this.onCloseModal} center>
              <img style={{maxWidth: '800px'}} src={item.image.src.publicURL} alt="projects" />
            </Modal>
            </Col>
          ))}
        </Row>
      </div>
    );
  }
}


export default props => (
  <StaticQuery
    query={graphql`
      query {
        dataJson {
          projects {
            id
            title
            image {
              src {
                publicURL
              }
            }
          }
        }
      }
    `}
    render={({ dataJson }) => <ProjectsList projects={dataJson.projects} {...props} />}
  />
)



最佳答案

我对您的代码做了一些编辑。那应该可以解决。 问题是您尚未将 modalImagestate 传递到模态图像中的 src

import React from "react"
import { StaticQuery, graphql } from 'gatsby'
import { Container, Row, Col } from 'react-grid-system'
import Modal from 'react-responsive-modal'

class ProjectsList extends React.Component {
  constructor(props) {
    super(props)
    this.state = { 
      open: false,
      modalImage: ""
    }
  }

  onOpenModal = (image) => {
    this.setState({ open: true, modalImage: image  });
  };

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

  render() {

    const projects = this.props;
    const { open, modalImage } = this.state;

    return(
      <div>
        <Row>
          {projects.projects.map(item =>(

            <Col md={6} key={item.id}>
            <div className="project-card">
              <div className="project-img-wrap">
              <img src={item.image.src.publicURL} alt="projects" onClick={() => this.onOpenModal(item.image.src.publicURL)} />
              </div>
              <div className="project-text-wrap">
              <span className="project-title">{item.title}</span>
              </div>
            </div>
            <Modal open={open} onClose={() => this.onCloseModal()} center>
              <img style={{maxWidth: '800px'}} src={modalImage} alt="projects" />
            </Modal>
            </Col>
          ))}
        </Row>
      </div>
    );
  }
}


export default props => (
  <StaticQuery
    query={graphql`
      query {
        dataJson {
          projects {
            id
            title
            image {
              src {
                publicURL
              }
            }
          }
        }
      }
    `}
    render={({ dataJson }) => <ProjectsList projects={dataJson.projects} {...props} />}
  />
)

关于javascript - 如何在打开模态时更新图像src,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59119654/

相关文章:

javascript - 如何在 javascript 中查找/检测页面中的任何文本区域

javascript - Web worker 和访问对象附加到 window 对象

javascript - 浏览器缩放时如何在打印时没有缩放内容?

reactjs - 如何理解react中的事件处理程序行为?

python - 如何在 GraphQL URL 中查找可用操作?

javascript - 使用谷歌脚本自动将 CSV 输出到谷歌表格

javascript - React 组件挂载到 DOM 后触发任何事件吗?

javascript - 如何使用 Enzyme 和 Jest 在单元测试中检查嵌套 React 组件的值

javascript - 使用 Gatsby 和 allImageSharp 上下文定位特定文件夹

graphql - 如何在 Gatsby 中使用 createResovers 将 Markdown 字段(不是文件)转换为 HTML