来自 JSON 的动态灯箱画廊

Dynamic lightbox gallery from JSON

我有这个 URL 被 Axios 成功获取

const URL_INTERIORES = 'http://localhost:3001/interiores';

我从 npm 安装了 react-image-lightbox,它为我提供了在数组中配置的默认图像。

const images = [
  '//placekitten.com/1500/500',
  '//placekitten.com/4000/3000',
  '//placekitten.com/800/1200',
  '//placekitten.com/1500/1500',
];

我想更改默认数组以从 db.json 文件中获取图像以进入图像的灯箱。我该如何解决? 这是代码的其余部分,具有 'react-image-lightbox' 配置:

class Interiores extends Component {
  constructor(props) {
    super(props)
    this.state = {
      interiores: [],
      photoIndex: 0,
      isOpen: false
    }

  }

  componentDidMount() {
    axios.get(URL_INTERIORES)
      .then(res => {
        this.setState({ interiores: res.data })
      })
  }

  render() {
    const { photoIndex, isOpen } = this.state;
    return (
      <div>
        <button type="button" onClick={() => this.setState({ isOpen: true })}>
          Open Lightbox
        </button>

        {isOpen && (
          <Lightbox
            mainSrc={images[photoIndex]}
            nextSrc={images[(photoIndex + 1) % images.length]}
            prevSrc={images[(photoIndex + images.length - 1) % images.length]}
            onCloseRequest={() => this.setState({ isOpen: false })}
            onMovePrevRequest={() =>
              this.setState({
                photoIndex: (photoIndex + images.length - 1) % images.length,
              })
            }
            onMoveNextRequest={() =>
              this.setState({
                photoIndex: (photoIndex + 1) % images.length,
              })
            }
          />
        )}           

      </div>
    )
  }
}    

export default Interiores;

这是我的 db.json 文件。

 "interiores": [
    {
      "text": "introduction text here",
      "images": [
        "int_01_thumb.jpg", "int_02_thumb.jpg", "int_03_thumb.jpg", 
        "int_04_thumb.jpg",  "int_05_thumb.jpg",  "int_06_thumb.jpg",  
        "int_07_thumb.jpg",  "int_08_thumb.jpg",  "int_09_thumb.jpg"
      ]
    }
  ],

我从来没有使用过这样的库,所以我可能会遗漏一些东西,但是像这样的替代方案行得通吗?

render() {
    const { interiores, photoIndex, isOpen } = this.state; // Added 'interiores'

    // Link to static root and make a relative path for each iamge
    const staticRoot = '//localhost:3001/interiores/'
    const images = interiores[0].images.map(i => staticRoot + i)

    // Rest of your code
}    

获得文件名后,只需 link 将它们添加到您的静态 files/images 路径并映射到图像数组。