NextJs 中用于图像的 Blob
Blob in NextJs for images
我需要使用 next 和节点作为后端等技术将图像 url 添加为 blob。
首先我尝试使用简单的方法来创建我需要的东西。
const ErrorMsg = (props) => {
const image = "/logo.png";
const blob = new Blob([image], {type: 'image/png'})
const img = URL.createObjectURL(blob);
return (
<>
<div className={classes.errorMsg}>
<img src={img} />
</div>
</>
)
}
第一次我不知道如何,但它的工作方式与 here 图像不显示但 webpack 也没有给出错误。
我忘记了它是怎么坏的,但是在我使用一些代码操作试图修复它之后我得到了这个错误。
Blob is not defined
.
我认为需要一个额外的包所以我安装了 node-blob
import Blob from "node-blob";
const ErrorMsg = (props) => {
const image = "/logo.png";
const blob = new Blob([image], {type: 'image/png'})
const img = URL.createObjectURL(blob);
return (
<>
<div className={classes.errorMsg}>
<img src={img} />
</div>
</>
)
}
所以现在我收到这个错误 URL.createObjectURL is not a function
两者 URL and Blob 都是网络的一部分 API,因此在您的应用程序的服务器端不可用。
如果你需要同时使用它们,你应该在useEffect
中使用它们,这只会在客户端触发。
import { useState, useEffect } from 'react';
const ErrorMsg = (props) => {
const image = "/logo.png";
const [src, setSrc] = useState(''); // initial src will be empty
useEffect(() => {
const blob = new Blob([image], {type: 'image/png'})
const img = URL.createObjectURL(blob);
setSrc(img); // after component is mount, src will change
}, []);
return (
<>
<div className={classes.errorMsg}>
<img src={src} />
</div>
</>
)
}
也就是说,您是否需要创建 Blob?您可以通过将静态文件存储在名为 public
的文件夹下来为 Next.js 提供静态文件,如 here.
所述
更好的方法是使用动态导入导入组件:
import dynamic from 'next/dynamic';
const MyComponentNoSSR = dynamic(() => import('./MyComponentNoSSR'), {
ssr: false,
});
如果您想将 next/image
组件与 blob 文件一起使用,您可以在该组件上设置 unoptimized
属性,Blob URL 驻留在内存中,因此它是临时的,不会'需要优化。
https://nextjs.org/docs/api-reference/next/image#unoptimized
我需要使用 next 和节点作为后端等技术将图像 url 添加为 blob。
首先我尝试使用简单的方法来创建我需要的东西。
const ErrorMsg = (props) => {
const image = "/logo.png";
const blob = new Blob([image], {type: 'image/png'})
const img = URL.createObjectURL(blob);
return (
<>
<div className={classes.errorMsg}>
<img src={img} />
</div>
</>
)
}
第一次我不知道如何,但它的工作方式与 here 图像不显示但 webpack 也没有给出错误。
我忘记了它是怎么坏的,但是在我使用一些代码操作试图修复它之后我得到了这个错误。
Blob is not defined
.
我认为需要一个额外的包所以我安装了 node-blob
import Blob from "node-blob";
const ErrorMsg = (props) => {
const image = "/logo.png";
const blob = new Blob([image], {type: 'image/png'})
const img = URL.createObjectURL(blob);
return (
<>
<div className={classes.errorMsg}>
<img src={img} />
</div>
</>
)
}
所以现在我收到这个错误 URL.createObjectURL is not a function
两者 URL and Blob 都是网络的一部分 API,因此在您的应用程序的服务器端不可用。
如果你需要同时使用它们,你应该在useEffect
中使用它们,这只会在客户端触发。
import { useState, useEffect } from 'react';
const ErrorMsg = (props) => {
const image = "/logo.png";
const [src, setSrc] = useState(''); // initial src will be empty
useEffect(() => {
const blob = new Blob([image], {type: 'image/png'})
const img = URL.createObjectURL(blob);
setSrc(img); // after component is mount, src will change
}, []);
return (
<>
<div className={classes.errorMsg}>
<img src={src} />
</div>
</>
)
}
也就是说,您是否需要创建 Blob?您可以通过将静态文件存储在名为 public
的文件夹下来为 Next.js 提供静态文件,如 here.
更好的方法是使用动态导入导入组件:
import dynamic from 'next/dynamic';
const MyComponentNoSSR = dynamic(() => import('./MyComponentNoSSR'), {
ssr: false,
});
如果您想将 next/image
组件与 blob 文件一起使用,您可以在该组件上设置 unoptimized
属性,Blob URL 驻留在内存中,因此它是临时的,不会'需要优化。
https://nextjs.org/docs/api-reference/next/image#unoptimized