0

我有这个被 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"
      ]
    }
  ],
4

1 回答 1

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
}    

获得文件名后,只需将它们链接到静态文件/图像路径并映射到图像数组。

于 2018-07-17T02:22:13.343 回答