代码之家  ›  专栏  ›  技术社区  ›  David.Warwick

警告:失败的属性类型:提供给“ImageGallery”的“string”类型的prop“items[0]”无效,应为“object”`

  •  0
  • David.Warwick  · 技术社区  · 6 年前

    我正在尝试创建一个JSON对象数组来传递给react image gallery。看这里 NPM react-image-gallery

    根据这个网页,我需要做一些类似的事情:

    const images = [
      {
        original: 'https://picsum.photos/id/1018/1000/600/',
        thumbnail: 'https://picsum.photos/id/1018/250/150/',
      },
      {
        original: 'https://picsum.photos/id/1015/1000/600/',
        thumbnail: 'https://picsum.photos/id/1015/250/150/',
      },
      {
        original: 'https://picsum.photos/id/1019/1000/600/',
        thumbnail: 'https://picsum.photos/id/1019/250/150/',
      },
    ];
     
    class MyGallery extends React.Component {
      render() {
        return <ImageGallery items={images} />;
      }
    }
    
    

    这是我的代码:

    
    import React, { Fragment, useState } from 'react';
    import axios from 'axios';
    import ImageGallery from 'react-image-gallery';
    //import '../image-gallery.css'
    import "react-image-gallery/styles/css/image-gallery.css";
    
    const AddNewItem = () => {
      var [fileState, setFile] = useState([]);
    
      var fileObj = {};
    
    //bunch of irrelevant code
    
     //Image Preview
      const onChange = e => {
    
        //setFile(e.target.files[0]);
        fileObj = e.target.files[0];
    
        console.log("AddNewItem fileObj: ", fileObj)
    
        setFile(fileState => [...fileState, JSON.parse(`"orignal: ${URL.createObjectURL(fileObj)}"`)]);
    }
    
    //bunch of irrelevant code
    
      return (
        < Fragment >
          {console.log("AddNewItem onChange fileState: ", fileState)}
    
          <form id="myForm" onSubmit={onSubmit}>
            <div className="container">
              <div className="row ">
                <div className="col">              
                 
                  <label className="mt-3 mb-0">Image:</label><br />
                  <input type="file" id="image" name="image" onChange={onChange}></input><br />
                  <button type="submit" className="mt-3">Submit</button>
    
                </div>
               
                <div className="col">
                  {fileState.length > 0 ? <ImageGallery items={fileState} showThumbnails={false} /> : ""}
                </div>
              </div>
            </div>
          </form>
    
        </Fragment >
      );
    
    

    当我上传我的第一个图像时,fileState等于以下值,我得到了Failed prop type错误:

    Image showing array and error

    当我上传第二个图像时,fileState看起来像:

    Image showing fileState with 2 images

    当fileState中有2个映像时,我没有得到错误。

    我在构建fileState的过程中是否做错了什么?如果是这样,我能做些什么来修复它?谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   nicodp    6 年前

    你应该把一个对象传递给 JSON.parse

    JSON.parse(`{"original": "${URL.createObjectURL(fileObj)}"}`)
    

    还有,你有个打字错误,关键应该是 original .