0

react-image-gallery用于显示画廊。我需要从 json 响应加载图像。我的代码如下,

let imagesArray = [
 {
    original: 'images/products/4.jpg'
 },
 {
    original: 'images/products/2.jpg'
 },
 {
    original: 'images/products/3.jpg'
 }
];

export default class Products extends React.Component {
  loadGallery () {
    var requestUrl = 'http://myurl';
    var myInit = { method: 'GET',
               mode: 'cors',
               cache: 'default' };
    fetch(requestUrl).then(response =>
      response.json().then(data => ({
          data: data,
          status: response.status
      })
    ).then(res => {
        let imagesArray = imagesArray.map((img,i)=>{ return {original: res.data[i].path.split(':')[1]}})
    }));
  }
   render() {
    return (
      <div className="products-page" onLoad={ this.loadGallery() }>
        <ImageGallery
          ref={i => this._imageGallery = i}
          items={imagesArray}/>
      </div>
    );
  }
}

我有一个错误Uncaught (in promise) TypeError: Cannot read property 'map' of undefined

如果我使用let newArray = imagesArray.map((img,i)=>{ return {original: res.data[i].path.split(':')[1]}})它会将值分配给newArray

在这里,我如何将 json 响应分配给imagesArray

4

2 回答 2

1

如果我的理解是正确的,您想要加载一组图像并将数据作为数组传递给ImageGallery组件。

您的代码也有一些错误/不受欢迎的地方:

当你这样做时,

<div className="products-page" onLoad={this.loadGallery()}>

实际上,您将loadGallery()在每次渲染时调用该函数,而您应该只传递函数原型。

<div className="products-page" onLoad={this.loadGallery}>

下面您将看到另一种实现您的要求的方法。在这里,我们将加载图像并使用来自 JSON 响应Product的新内容更新组件的状态。imagesArray所以当状态更新时,组件会重新渲染并将新数据传递给ImageGallery组件。

const dummyImagesArray = [
  {
    original: 'images/products/4.jpg'
  },
  {
    original: 'images/products/2.jpg'
  },
  {
    original: 'images/products/3.jpg'
  }
];

export default class Products extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      imagesArray: dummyImagesArray
    }
  }

  loadGallery () {
    var requestUrl = 'http://myurl';
    var myInit = { method: 'GET',
               mode: 'cors',
               cache: 'default' };
    fetch(requestUrl).then(response =>
      response.json().then(data => ({
          data: data,
          status: response.status
      })
    ).then(res => {
        const imagesArray = this.state.imagesArray.map((img,i) => { return { original: res.data[i].path.split(':')[1] }; });
        this.setState({ imagesArray });
    }));
  }

  render() {
    return (
      <div className="products-page" onLoad={this.loadGallery}>
        <ImageGallery
          ref={i => this._imageGallery = i}
          items={this.state.imagesArray}
        />
      </div>
    );
  }
}
于 2016-12-10T07:16:08.263 回答
0

所以 JSON 实际上并不存在于 React 中。您可能需要在此处设置一个表示 JSON 数据并将其返回到地图的类。map 基本上在做的就是一层一层地剥离你的对象的层。所以像,

class ImagesArray extends React.Component() {
    render() {
        return {
            <image src={this.props.original}/>
        }
    }
}
于 2016-12-10T07:10:54.387 回答