警告:道具类型失败:提供给“ImageGallery”的“string”类型的道具“items[0]”无效,预期为“object”
Warning: Failed prop type: Invalid prop `items[0]` of type `string` supplied to `ImageGallery`, expected `object`
我知道这可能看起来微不足道,但我是新手,显然我遗漏了一些东西。
我正在尝试创建一个看似 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 错误:
当我上传第二张图片时,fileState 看起来像:
当 fileState 中有 2 个图像时,我没有收到错误。
画廊没有显示任何图像。我确实得到了箭头和播放/暂停按钮,但我没有看到任何图像。但是我不能完全确定我是否根据上面提到的npm网页正确导入了image-gallery.css。但如果这是一个问题,那么我会 post 在这里提出另一个问题。
我是不是在构建 fileState 的方式上做错了什么?如果是这样,我该怎么做才能解决它?谢谢。
您应该将对象传递给 JSON.parse
:
JSON.parse(`{"original": "${URL.createObjectURL(fileObj)}"}`)
还有,你打错了,key应该是original
.
我知道这可能看起来微不足道,但我是新手,显然我遗漏了一些东西。
我正在尝试创建一个看似 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 错误:
当我上传第二张图片时,fileState 看起来像:
当 fileState 中有 2 个图像时,我没有收到错误。
画廊没有显示任何图像。我确实得到了箭头和播放/暂停按钮,但我没有看到任何图像。但是我不能完全确定我是否根据上面提到的npm网页正确导入了image-gallery.css。但如果这是一个问题,那么我会 post 在这里提出另一个问题。
我是不是在构建 fileState 的方式上做错了什么?如果是这样,我该怎么做才能解决它?谢谢。
您应该将对象传递给 JSON.parse
:
JSON.parse(`{"original": "${URL.createObjectURL(fileObj)}"}`)
还有,你打错了,key应该是original
.