JSON的动态灯箱图库

时间:2018-07-17 01:16:21

标签: json reactjs lightbox

我有一个由Axios成功获取的URL

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"
      ]
    }
  ],

1 个答案:

答案 0 :(得分:1)

我从来没有使用过这样的库,所以我可能会丢失一些东西,但是像这样的替代方法会起作用吗?

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
}    

一旦有了文件名,只需将它们链接到静态文件/图像路径并映射到图像阵列即可。