diff --git "a/docs/doc/\360\237\217\204 \345\205\263\344\272\216/qfaugcu7d1ucqdq5.md" "b/docs/doc/\360\237\217\204 \345\205\263\344\272\216/qfaugcu7d1ucqdq5.md"
index df6a9c6..acf5b51 100644
--- "a/docs/doc/\360\237\217\204 \345\205\263\344\272\216/qfaugcu7d1ucqdq5.md"
+++ "b/docs/doc/\360\237\217\204 \345\205\263\344\272\216/qfaugcu7d1ucqdq5.md"
@@ -2,13 +2,26 @@
title: 更新日志
urlname: qfaugcu7d1ucqdq5
date: '2024-05-22 08:47:22'
-updated: '2024-09-28 20:58:38'
-description: '---nav_path: changelog---介绍当前网站的更新计划以及快要更新的东西,如果大家有特别的需要也可以进行留言。2024-09新增评论邮件发送功能优化评论邮件通知功能中模板样式新增页面下一页以及上一页优化黑白模式-公告优化页面-切换页面链接的时候,视图不对优化首页排版-高度不一...'
+updated: '2024-10-10 20:58:04'
+description: '---nav_path: changelog---介绍当前网站的更新计划以及快要更新的东西,如果大家有特别的需要也可以进行留言。2024-10新增:写一个脚本,每日定时更新网站切换为静态生成网页修改仓库名称为AirBlog首页修改-新增标签墙切换邮件通知功能到163邮箱,防止被设置为垃圾邮箱新...'
nav_path: changelog
---
介绍当前网站的更新计划以及快要更新的东西,如果大家有特别的需要也可以进行留言。
-
+## 2024-10
+- [ ] 新增:写一个脚本,每日定时更新网站
+- [ ] 切换为静态生成网页
+- [ ] 修改仓库名称为AirBlog
+- [ ] 首页修改-新增标签墙
+- [ ] 切换邮件通知功能到163邮箱,防止被设置为垃圾邮箱
+- [ ] 新增评论审核功能:关键词(阿里云、腾讯云的api接口太贵了)
+- [ ] 在每个页面的下面增加一功能,叫做**当前页面的热评**
+- [ ] 优化移动端排版(网盘拉新必备)
+- [ ] 优化搜索功能-宽度
+- [ ] 新增栏目-开源项目、go框架、参考gostack.cc
+- [ ] 借鉴 xargin.com网站排版
+- [ ] 优化:百度提交改为先提交最新的20篇文章,再在之前的文章里随机挑选提交
+- [ ] 新增留言版
## 2024-09
- [x] 新增评论邮件发送功能
@@ -24,18 +37,6 @@ nav_path: changelog
- [x] 友情链接页面优化
- [x] 新增图片优化:For production Image Optimization with Next.js, the optional 'sharp' package is strongly recommended. Run '**npm i sharp**', and Next.js will use it automatically for Image Optimization
- [x] 优化搜索功能-背景颜色不对(是pliny的背景不对,github提问了)
-- [ ] 切换为静态生成网页
-- [ ] 修改仓库名称为AirBlog
-- [ ] 首页修改-新增标签墙
-- [ ] 切换邮件通知功能到163邮箱,防止被设置为垃圾邮箱
-- [ ] 新增评论审核功能:关键词(阿里云、腾讯云的api接口太贵了)
-- [ ] 在每个页面的下面增加一功能,叫做**当前页面的热评**
-- [ ] 优化移动端排版(网盘拉新必备)
-- [ ] 优化搜索功能-宽度
-- [ ] 新增栏目-开源项目、go框架、参考gostack.cc
-- [ ] 借鉴 xargin.com网站排版
-- [ ] **百度提交**改为先提交最新的20篇文章,再在之前的文章里随机挑选提交
-- [ ] 新增留言版
## 2024-7-17
+ 新增**搜索功能**
diff --git "a/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/oxwter7kgwvcsr3g.md" "b/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/oxwter7kgwvcsr3g.md"
index d180477..1946422 100644
--- "a/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/oxwter7kgwvcsr3g.md"
+++ "b/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/oxwter7kgwvcsr3g.md"
@@ -2,7 +2,7 @@
title: A component is changing an uncontrolled input to be controlled.
urlname: oxwter7kgwvcsr3g
date: '2024-10-10 08:21:01'
-updated: '2024-10-10 08:21:56'
+updated: '2024-10-10 20:51:06'
description: 在前端开发中,我们经常会处理表单输入。表单输入组件可以分为受控组件和非受控组件,理解它们之间的转换以及背后的原理对于构建高效、可维护的用户界面至关重要。一、受控组件与非受控组件的概念受控组件受控组件的值由React组件的状态来控制。当表单元素的值发生变化时,通过事件处理函数将新的值更新到组件的...
---
在前端开发中,我们经常会处理表单输入。
@@ -15,6 +15,8 @@ description: 在前端开发中,我们经常会处理表单输入。表单输
### 受控组件
+ 受控组件的值由React组件的状态来控制。当表单元素的值发生变化时,通过事件处理函数将新的值更新到组件的状态中,然后React会根据新的状态重新渲染组件,确保界面显示与状态一致。
+
+
例如,一个简单的输入框作为受控组件:
```jsx
@@ -33,7 +35,11 @@ const ControlledInputExample = () => {
};
```
-在这个例子中,`inputValue`是组件的状态,它控制着输入框的值。每当用户在输入框中输入内容时,`onChange`事件会触发`handleInputChange`函数,将输入框的新值更新到状态中,从而实现了对输入框的控制。
+在这个例子中,`inputValue`是组件的状态,它控制着输入框的值。
+
+
+
+每当用户在输入框中输入内容时,`onChange`事件会触发`handleInputChange`函数,将输入框的新值更新到状态中,从而实现了对输入框的控制。
### 非受控组件
+ 非受控组件的值由DOM本身来管理。我们可以通过`ref`来获取表单元素的值,但不会像受控组件那样通过状态来严格控制其值的更新和渲染。例如:
diff --git "a/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/\343\200\214\344\270\207\350\265\236\343\200\215\344\270\215\344\270\200\346\240\267\347\232\204Nextjs\357\274\201/fh0i0wlmcihk1f0s.md" "b/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/\343\200\214\344\270\207\350\265\236\343\200\215\344\270\215\344\270\200\346\240\267\347\232\204Nextjs\357\274\201/fh0i0wlmcihk1f0s.md"
index d7eee34..5579825 100644
--- "a/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/\343\200\214\344\270\207\350\265\236\343\200\215\344\270\215\344\270\200\346\240\267\347\232\204Nextjs\357\274\201/fh0i0wlmcihk1f0s.md"
+++ "b/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/\343\200\214\344\270\207\350\265\236\343\200\215\344\270\215\344\270\200\346\240\267\347\232\204Nextjs\357\274\201/fh0i0wlmcihk1f0s.md"
@@ -1,16 +1,16 @@
---
-title: 「加餐」关于Next Image你可能不知道的事情
+title: 关于Next Image你可能不知道的事情
urlname: fh0i0wlmcihk1f0s
date: '2024-10-09 13:19:12'
-updated: '2024-10-09 13:31:17'
+updated: '2024-10-10 20:55:09'
cover: 'https://cdn.nlark.com/yuque/0/2024/png/22382235/1728451253027-87e5e1dc-6464-4e01-b71c-2d976ffd7030.png'
-description: 如果您使用过 Next.js,您可能遇到过 Next Image 组件。这种无忧的图像优化解决方案不仅提供对 webp 和 avif 等现代格式的支持,而且还生成针对不同屏幕尺寸定制的多个版本。要利用这种魔力,只需将以下代码添加到您的页面即可:import Image from 'next/i...
+description: 如果使用过 Next.js,可能遇到过 Next Image 组件。这种无忧的图像优化解决方案不仅提供对 webp 和 avif 等现代格式的支持,而且还生成针对不同屏幕尺寸定制的多个版本。要利用这种魔力,只需将以下代码添加到的页面即可:import Image from 'next/imag...
---
-如果您使用过 Next.js,您可能遇到过 Next Image 组件。这种无忧的图像优化解决方案不仅提供对 webp 和 avif 等现代格式的支持,而且还生成针对不同屏幕尺寸定制的多个版本。
+如果使用过 Next.js,可能遇到过 Next Image 组件。这种无忧的图像优化解决方案不仅提供对 webp 和 avif 等现代格式的支持,而且还生成针对不同屏幕尺寸定制的多个版本。
-要利用这种魔力,只需将以下代码添加到您的页面即可:
+要利用这种魔力,只需将以下代码添加到的页面即可:
```typescript
import Image from 'next/image';
@@ -75,65 +75,66 @@ export default function Page() {
```
-此编码 URL 接受两个参数: `w` (宽度)和`q` (质量),这两个参数在解码版本中更加明显。您可以发现没有`h` (高度)属性,但我们将在本文后面讨论这一点。
+此编码 URL 接受两个参数: `w` (宽度)和`q` (质量),这两个参数在解码版本中更加明显。
+
+
+
+可以发现没有`h` (高度)属性,但我们将在本文后面讨论这一点。
### Next Image API
Next Image API 用作图像代理,类似于[IPX](https://github.com/unjs/ipx) 。它执行以下任务:
-+ Accepts an **image URL**, **width**, and **quality**
-接受**图像 URL** 、**宽度**和**质量**
-+ Validates parameters 验证参数
-+ Determines cache control policies
-确定缓存控制策略
-+ Processes the image 处理图像
-+ Serves the image in a format supported by the user's browser
-以用户浏览器支持的格式提供图像
+
+
++ 接受**图像 URL** 、**宽度**和**质量**
++ 验证参数
++ 确定缓存控制策略
++ 处理图像
++ 以用户浏览器支持的格式提供图像
-As things begin to make more sense, let's briefly discuss the final piece of the puzzle before we draw some conclusions from this arrangement.
+
随着事情开始变得更有意义,在我们从这种安排中得出一些结论之前,让我们先简要讨论一下这个难题的最后一块。
### Image Optimizer 图像优化器
-Next Image utilizes different image optimization libraries - Sharp or Squoosh - depending on certain conditions:
+
Next Image 根据特定条件使用不同的图像优化库 - Sharp 或 Squoosh:
-Sharp is a fast and efficient image optimization Node.js module that makes use of the native [libvips](https://github.com/libvips/libvips) library.
+
Sharp 是一个快速高效的图像优化 Node.js 模块,它利用本机[libvips](https://github.com/libvips/libvips)库。
-Squoosh is a fully node-based image optimization solution. It's slower, but it doesn't require any additional libraries to be installed on a machine. For this reason, Sharp is recommended for production use, whereas Squoosh is used by default in local environments.
+
Squoosh 是一个完全基于节点的图像优化解决方案。它速度较慢,但不需要在计算机上安装任何额外的库。因此,建议在生产环境中使用 Sharp,而在本地环境中默认使用 Squoosh。
-I advise using Sharp in local environments as well. While both Sharp and Squoosh optimize images quite similarly, Sharp's compression algorithms can lead to color degradation compared to Squoosh.
+
我建议在本地环境中也使用 Sharp。虽然 Sharp 和 Squoosh 优化图像的方式非常相似,但与 Squoosh 相比,Sharp 的压缩算法可能会导致颜色退化。
-This can result in visually different behavior between production and local environments, particularly when trying to match the background color of an image with the page background.
+
这可能会导致生产环境和本地环境之间出现视觉上不同的行为,特别是在尝试将图像的背景颜色与页面背景相匹配时。
## Outcomes 结果
-Having understood the primary architecture behind `next/image`, we can debunk common misconceptions and glean more insights on how to utilize it more effectively.
-了解了`next/image`背后的主要架构后,我们可以揭穿常见的误解,并收集有关如何更有效地利用它的更多见解。
+了解了`next/image`背后的主要架构后,我们可以揭穿常见的误解,并收集有关如何更有效地利用它的更多见解。
### next/image does not crop 下一个/图像不裁剪
-A common misconception among developers is that `next/image` can crop their images. This confusion arises because you can pass width, height, and fill properties to the component, creating an impression that the image has been cropped. In reality, this isn't the case.
-开发人员中的一个常见误解是`next/image`可以裁剪他们的图像。出现这种混乱的原因是您可以将宽度、高度和填充属性传递给组件,从而造成图像已被裁剪的印象。事实上,情况并非如此。
-The Next Image component primarily requires width and height for assigning to the img tag to prevent layout shifts.
+开发人员中的一个常见误解是`next/image`可以裁剪他们的图像。出现这种混乱的原因是可以将宽度、高度和填充属性传递给组件,从而造成图像已被裁剪的印象。事实上,情况并非如此。
+
下一个图像组件主要需要分配给 img 标签的宽度和高度,以防止布局移位。
![](https://oss1.aistar.cool/elog-offer-now/018d680a1660fd970482ba2c979d4482.png)
-As we've already discussed, the Image API does not accept a height parameter, meaning it currently isn't possible to change the original image's aspect ratio. If you don't use the fill property, the image will merely stretch or shrink in the event of width-height mismatches.
+
正如我们已经讨论过的,图像 API 不接受高度参数,这意味着当前无法更改原始图像的长宽比。如果不使用 fill 属性,则在宽度高度不匹配的情况下,图像只会拉伸或收缩。
-However, if you're using TailwindCSS, it behaves differently due to its default global CSS rule:
-但是,如果您使用 TailwindCSS,由于其默认的全局 CSS 规则,它的行为会有所不同:
+
+但是,如果使用 TailwindCSS,由于其默认的全局 CSS 规则,它的行为会有所不同:
```typescript
img,
@@ -144,31 +145,27 @@ video {
```
-This makes layout shift issues harder to detect.
+
这使得布局移位问题更难以检测。
### Displayed image width ≠ loaded image width
显示图像宽度≠加载图像宽度
-Another potential point of confusion is that the width property passed to `next/image` doesn't represent the actual width to which the image will be resized. As we noted from the example at the start of the article, passing `width={500}` to a component will result in the image being resized to a width of 640px, as evident in the generated URL:
-另一个潜在的混淆点是传递给`next/image` width 属性并不代表图像将调整大小的实际宽度。正如我们在文章开头的示例中指出的,将`width={500}`传递给组件将导致图像大小调整为 640px 的宽度,如生成的 URL 所示:
+另一个潜在的混淆点是传递给`next/image` width 属性并不代表图像将调整大小的实际宽度。正如我们在文章开头的示例中指出的,将`width={500}`传递给组件将导致图像大小调整为 640px 的宽度,如生成的 URL 所示:
```typescript
/_next/image?url=/images/example.jpg&w=640&q=75
```
-
-
-If you expect the x2 retina version to utilize an image width of 1000px or 1280px, you're in for a surprise. The actual width used will be 1080px. Naturally, you might wonder where these numbers are coming from.
-如果您期望 x2 视网膜版本使用 1000 像素或 1280 像素的图像宽度,那么您将会感到惊讶。实际使用的宽度将为 1080px。当然,您可能想知道这些数字是从哪里来的。
+
+如果期望 x2 视网膜版本使用 1000 像素或 1280 像素的图像宽度,那么将会感到惊讶。实际使用的宽度将为 1080px。当然,可能想知道这些数字是从哪里来的。
![](https://oss1.aistar.cool/elog-offer-now/86fd6f1c87b993a27ddf4e680e7191ba.png)
-Next.js resizes images to the closest size from an array of`deviceSizes` and `imageSizes` that you can define in `next.config.js`. By default, these are:
-Next.js 将图像大小调整为您可以在`next.config.js`中定义的`deviceSizes`和`imageSizes`数组中最接近的大小。默认情况下,这些是:
+Next.js 将图像大小调整为可以在`next.config.js`中定义的`deviceSizes`和`imageSizes`数组中最接近的大小。默认情况下,这些是:
```typescript
module.exports = {
@@ -180,12 +177,11 @@ module.exports = {
```
-What's crucial to note here is that using the default configuration can negatively impact performance, leading to a reduced score in Lighthouse's Page Speed Insights. This becomes particularly evident when you attempt to display large images on a page.
-这里需要注意的重要一点是,使用默认配置会对性能产生负面影响,导致 Lighthouse 的页面速度洞察分数降低。当您尝试在页面上显示大图像时,这一点变得尤其明显。
-For instance, if you want to render an image with a width of 1250px, the actual loaded image width will be 1920px. The discrepancy between the required size and the actual loaded size becomes even greater for x2 retina versions, as these will be resized to 3840px.
+这里需要注意的重要一点是,使用默认配置会对性能产生负面影响,导致 Lighthouse 的页面速度洞察分数降低。当尝试在页面上显示大图像时,这一点变得尤其明显。
+
例如,如果要渲染宽度为 1250px 的图像,则实际加载的图像宽度将为 1920px。对于 x2 视网膜版本,所需尺寸和实际加载尺寸之间的差异甚至更大,因为这些版本的尺寸将调整为 3840 像素。
-However, you can remedy this by adding more sizes to the `deviceSizes` or `imageSizes` arrays([docs](https://nextjs.org/docs/app/api-reference/components/image#devicesizes)).
-但是,您可以通过向`deviceSizes`或`imageSizes`数组添加更多尺寸来解决此问题([文档](https://nextjs.org/docs/app/api-reference/components/image#devicesizes))。
+
+但是,可以通过向`deviceSizes`或`imageSizes`数组添加更多尺寸来解决此问题([文档](https://nextjs.org/docs/app/api-reference/components/image#devicesizes))。
![](https://oss1.aistar.cool/elog-offer-now/fa80d61edcf74feb87be01d508f8ef81.png)
@@ -193,16 +189,16 @@ module.exports = {
### Image optimization can be used without the next/image component
图像优化可以在没有next/image组件的情况下使用
-With an understanding of the core architecture, it's easy to see that you can use the Image API without necessarily using `next/image`. There are several scenarios in which this can be beneficial.
-了解核心架构后,很容易看出您可以使用 Image API 而不必使用`next/image` 。在多种情况下,这可能是有益的。
+
+了解核心架构后,很容易看出可以使用 Image API 而不必使用`next/image` 。在多种情况下,这可能是有益的。
-First, you can render optimized images inside a canvas. Regardless of whether you're loading images onto a canvas from external sources or from local storage, you can pass the correct URL to the API and have it work seamlessly.
-首先,您可以在画布内渲染优化的图像。无论您是从外部源还是从本地存储将图像加载到画布上,您都可以将正确的 URL 传递给 API 并使其无缝运行。
+
+首先,可以在画布内渲染优化的图像。无论是从外部源还是从本地存储将图像加载到画布上,都可以将正确的 URL 传递给 API 并使其无缝运行。
-Additionally, you can use it to optimize OG images or create your own `