自己做网站在线看pdf/常见的网络营销模式

自己做网站在线看pdf,常见的网络营销模式,铜城建设集团网站,西地那非片的功效和副作用官网 https://nextjs.org/docs/app/getting-started Next.js 简介 Next.js 由 Vercel 开发和维护,旨在解决单页应用(SPA)和多页应用(MPA)在性能和 SEO 上的不足。 核心特性 服务端渲染(SSR)--…

官网 https://nextjs.org/docs/app/getting-started

Next.js 简介

Next.js 由 Vercel 开发和维护,旨在解决单页应用(SPA)和多页应用(MPA)在性能和 SEO 上的不足。

核心特性

  • 服务端渲染(SSR)-- 在服务器端预渲染页面,将 HTML 直接发送到客户端,从而提高了页面加载速度和 SEO 效果。
  • 静态生成(SSG)-- 在构建时生成 HTML 的方式,使得每个页面的内容都能在构建时生成并缓存,这样无需在每次请求时生成 HTML,从而显著提升页面性能。
  • 通过文件系统的结构快速创建页面路由。同时,API 路由功能使开发者能够直接在 Next.js 项目中创建后端 API
  • 增量静态再生成(ISR)-- 将部分页面静态化,并在内容更新时触发重新生成,以确保页面内容的新鲜度和快速访问。
  • 内置图像优化功能,可通过 <Image /> 组件自动进行图像懒加载、响应式优化和格式转换,有效减少加载时间并提升页面性能。
  • 对 CSS 模块、Sass 和 styled-jsx 原生支持,支持 Tailwind CSS 和其他流行的 CSS 框架

适用场景

  • 内容驱动的网站:如博客、新闻网站等,Next.js 的 SSG 和 ISR 特性使其在内容频繁更新时,能够保持高效的性能和良好的 SEO 表现。
  • 电商平台:对于电商网站,Next.js 的 SSR 和 ISR 能够确保页面快速响应,满足用户体验的需求,同时也便于动态加载产品信息。
  • Web应用:复杂的企业级应用或 SaaS 应用可以利用 Next.js 提供的 SSR、动态路由和 API 路由实现高性能的全栈架构。
  • 个人网站和组合展示:对于个人博客和作品展示,Next.js 提供了静态生成和图像优化功能,能够确保简洁高效的页面展示。

搭建开发环境,创建项目

  • 安装 Node.js
  • 创建项目
npx create-next-app@latest

在这里插入图片描述
在这里插入图片描述

会自动安装依赖

  • 用 vscode 打开项目,并启动
    在这里插入图片描述
    浏览器访问 http://localhost:3000/ 效果如下

在这里插入图片描述

项目目录

  • src\app\page.tsx 项目首页
  • src\app\layout.tsx 页面布局
  • public 静态资源,例如图像、字体等

页面路由

会根据 src\app 内的文件自动创建,具体对应关系范例如下:

路由文件路径
/src\app\page.tsx
/blogsrc\app\blog\page.tsx
/blog/动态参数src\app\blog\[slug]\page.tsx
  • 所有页面路由都对应一个 page.tsx
  • 含动态参数的路由,对应 [slug] 文件夹下的 page.tsx

页面中获取路由动态参数的方法如下

export default async function Page({params,
}: {params: Promise<{ slug: string }>;
}) {const { slug } = await params;return (<><h1>{slug} 篇博客的标题</h1><p>{slug} 篇博客的内容</p></>);
}
  • 页面函数组件的参数为 { params,}
  • 函数参数的类型为 { params: Promise<{ slug: string }>;},可见参数 params 是一个 Promise
  • 需用 await 同步获取到 params ,并解构出其中的 slug
  • 解构出的 slug 值即路由上的动态参数,以 /blog/1 为例,slug 的值为 1

路由跳转

Link

内置的 Link 组件,点击可实现路由跳转

import Link from "next/link";
 <Link href="/blog">板块--博客</Link>

页面布局

每个文件夹下的 layout.tsx 文件,即该文件夹对应路由的页面布局

布局布局文件路径
全局布局src\app\layout.tsx
/blog 的布局src\app\blog\layout.tsx

以 blog 板块的布局为例,src\app\blog\layout.tsx 的内容为

export default function BlogLayout({children,
}: {children: React.ReactNode;
}) {return (<><header>页头-博客板块</header><section>{children}</section></>);
}
  • BlogLayout 为任意自定义的布局函数名称
  • 函数的参数为 {children:children} , 简写为 {children}
  • 函数参数的类型为 {children:React.ReactNode}
  • 函数的返回内容需含有 {children} ,其他内容可任意自定义

后端服务

Next.js 不仅能构建前端页面,还同时提供了后端服务

src\app\api 内的 route.js 会自动生成后端接口

范例:src\app\api\blog\route.js

import { NextResponse } from "next/server";// 处理 GET 请求
export async function GET(request) {// 这里可以编写从数据库或其他数据源获取用户数据的逻辑const data = [{id: 1,title: "第1篇博客的标题",content: "第1篇博客的内容",},{id: 2,title: "第2篇博客的标题",content: "第2篇博客的内容",},];return NextResponse.json(data);
}

启动项目后,浏览器访问 http://localhost:3000/api/blog ,效果如下:

在这里插入图片描述

内置组件

图片 Image

Next.js 内置的 next/image 图像优化组件,通过以下功能提升图像性能:

  • 图片格式统一转换为 WebP,并根据设备尺寸自动调整分辨率
  • 避免了图片加载过程中的布局偏移(Layout Shift)
  • 默认情况下,图像在进入视窗时才加载,可选择使用模糊占位符。
  • 通过设置尺寸属性,图像可以根据屏幕大小自适应。

图片存于目录 public\images 中

在这里插入图片描述

import Image from "next/image";

本地图片

      <Imagesrc="/images/风景.png"alt="图片-风景"width={600}height={400}// 开启响应式 -- 根据宽高比调整图像尺寸,确保在不同设备上始终显示最佳比例。layout="responsive" // 禁用懒加载 -- 可提高页面加载图片的优先级priority// 图片加载时的占位图blurDataURL="/images/img_loading.png"/>

远程图片

需先在 next.config.ts 中配置图片域名

import type { NextConfig } from "next";const nextConfig: NextConfig = {// 配置图片域名images: {remotePatterns: [{hostname: "se2.360simg.com",},],},
};export default nextConfig;

再在页面中使用

      <Imagesrc="https://se2.360simg.com/t01d8935450f8ea8ffb.png"alt="图片-远程"width={600}height={400}priority // 提高页面加载时的优先级blurDataURL="/images/img_loading.png"/>

响应式图片 sizes

<Imagefillsrc="/example.png"sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"/>

图片加载占位符 blurDataURL

  • 需同时设置 placeholder="blur"
  • blurDataURL 的值为 base64的图片(建议用极小的)
import Image from "next/image";const fs = require("fs");const imagePath = "./public/images/img_loading.png";
const imageBuffer = fs.readFileSync(imagePath);
const base64Image = imageBuffer.toString("base64");
const blurDataURL = `data:image/jpeg;base64,${base64Image}`;export default function Page() {return (<><Imagesrc="https://se2.360simg.com/t01d8935450f8ea8ffb.png"width={600}height={400}placeholder="blur"// 图片加载时的占位图blurDataURL={blurDataURL}/></>);
}

在这里插入图片描述

字体

“next/font” 模块对字体进行了优化:

  • 避免网络请求,提高了隐私性和性能
  • 自托管的网页字体不会有布局偏移

传统的 Web 字体加载方式:网络请求字体文件,在字体加载完成前,页面显示为空白或默认字体,加载完成后,页面的字体突然改变,可能引发布局偏移

Google 字体 【默认】

在创建项目时,便自动采用了 Google 字体 ,见 src\app\layout.tsx

import { Geist, Geist_Mono } from "next/font/google";
const geistSans = Geist({variable: "--font-geist-sans",subsets: ["latin"],
});const geistMono = Geist_Mono({variable: "--font-geist-mono",subsets: ["latin"],
});
      <bodyclassName={`${geistSans.variable} ${geistMono.variable} antialiased`}>

本地字体

  1. 将本地字体文件放入 src\app 中,如 src\app\昆明海鸥体.ttf

    百度云盘下载链接: https://pan.baidu.com/s/1rLFdlFoD5oTVNMUM6e4pOA?pwd=4526

  2. 将 src\app\layout.tsx 修改为

    import type { Metadata } from "next";import "./globals.css";// 引入本地字体处理函数 localFont
    import localFont from "next/font/local";// localFont函数将本地字体文件转换为字体类名
    const myFont = localFont({src: "./昆明海鸥体.ttf",
    });export const metadata: Metadata = {title: "Create Next App",description: "Generated by create next app",
    };export default function RootLayout({children,
    }: Readonly<{children: React.ReactNode;
    }>) {return (<html lang="en">// body 上添加字体类名<body className={myFont.className}>{children}</body></html>);
    }
    

效果如下:

在这里插入图片描述

实战范例

在这里插入图片描述

src\app\page.tsx

import Link from "next/link";export default function Page() {return (<><h1>首页</h1><div><Link href="/blog">板块--博客</Link></div><div><Link href="/note">板块--笔记</Link></div></>);
}

src\app\layout.tsx

import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";const geistSans = Geist({variable: "--font-geist-sans",subsets: ["latin"],
});const geistMono = Geist_Mono({variable: "--font-geist-mono",subsets: ["latin"],
});export const metadata: Metadata = {title: "Create Next App",description: "Generated by create next app",
};export default function RootLayout({children,
}: Readonly<{children: React.ReactNode;
}>) {return (<html lang="en"><bodyclassName={`${geistSans.variable} ${geistMono.variable} antialiased`}><header>页头--全局</header>{children}</body></html>);
}

src\app\blog\page.tsx

在这里插入图片描述

import Link from "next/link";interface blog {id: number;title: string;content: string;
}
export default async function Page() {const data = await fetch("http://localhost:3000/api/blog");const blogList = await data.json();return (<><h1>博客列表</h1><ul>{blogList.map((blog: blog) => (<li key={blog.id}><Link href={`/blog/${blog.id}`}>{blog.title}</Link></li>))}</ul></>);
}

src\app\blog\layout.tsx

export default function BlogLayout({children,
}: {children: React.ReactNode;
}) {return (<><header>页头-博客板块</header><section>{children}</section></>);
}

src\app\blog[slug]\page.tsx

在这里插入图片描述

export default async function Page({params,
}: {params: Promise<{ slug: string }>;
}) {const { slug } = await params;return (<><h1>{slug} 篇博客的标题</h1><p>{slug} 篇博客的内容</p></>);
}

src\app\api\blog\route.js

import { NextResponse } from "next/server";// 处理 GET 请求
export async function GET(request) {// 这里可以编写从数据库或其他数据源获取用户数据的逻辑const data = [{id: 1,title: "第1篇博客的标题",content: "第1篇博客的内容",},{id: 2,title: "第2篇博客的标题",content: "第2篇博客的内容",},];return NextResponse.json(data);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/70968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文字转语音(四)使用jacob库实现

项目中有相关的功能&#xff0c;就简单研究了一下。 实现原理 ACOB 库&#xff1a;JAva COM Bridge&#xff0c;允许 Java 通过 COM 接口调用 Windows 组件&#xff08;如 SAPI&#xff09;Speech API (SAPI)&#xff1a;Windows 内置的语音引擎&#xff0c;支持 TTS 功能。 …

KEPServerEX 中信道深入介绍

以下是 KEPServerEX 中信道&#xff08;Channel&#xff09; 的详细介绍&#xff0c;涵盖其定义、功能、配置步骤及最佳实践&#xff0c;帮助您快速掌握信道在数据采集中的核心作用&#xff1a; 一、信道&#xff08;Channel&#xff09;的定义 信道 是 KEPServerEX 中 连接物…

Shell脚本笔记

Linux其他命令 Shell脚本笔记

K8S下载离线安装包所需文件

下载相关文件 官网下载地址集合https://kubernetes.io/zh-cn/releases/download/ 下载相关镜像 官网镜像描述 所有 Kubernetes 容器镜像都被部署到 registry.k8s.io 容器镜像仓库。 容器镜像支持架构registry.k8s.io/kube-apiserver:v1.32.0amd64, arm, arm64, ppc64le, …

Vivado生成edif网表及其使用

介绍如何在Vivado中将模块设为顶层&#xff0c;并生成相应的网表文件&#xff08;Verilog文件和edif文件&#xff09;&#xff0c;该过程适用于需要将一个模块作为顶层设计进行综合&#xff0c;并生成用于其他工程中的网表文件的情况。 例如要将fpga_top模块制作成网表给其它工…

企业网站建站源码 网站源码程序下载

在数字化时代&#xff0c;企业网站已成为企业展示形象、推广产品、服务客户的重要窗口。而选择合适的建站源码&#xff0c;则是搭建一个功能强大、美观易用的企业网站的关键。 一、企业网站建站源码的优势 降低成本&#xff1a; 相较于定制开发&#xff0c;使用建站源码可以大…

Android RenderEffect对Bitmap高斯模糊(毛玻璃),Kotlin(1)

Android RenderEffect对Bitmap高斯模糊(毛玻璃)&#xff0c;Kotlin&#xff08;1&#xff09; import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.HardwareRenderer import android.graphics.PixelFormat import android.graphic…

vue3实战-----封装和使用svg图标

vue3实战-----封装和使用svg图标 1.安装和配置svg插件2.解决引入虚拟模块失败的问题3.使用svg4.封装svg组件5.自定义插件注册svg全局组件 在开发项目的时候经常会用到svg矢量图,使用SVG以后,页面上加载的不再是图片资源,这对页面性能来说是个很大的提升,我们SVG文件比img要小的…

DeepSeek正重构人形机器人和具身大模型赛道!

中国人工智能公司DeepSeek&#xff08;深度求索&#xff09;以“低成本、高效率、强开放”的研发范式横空出世&#xff0c;火遍并震撼全球科技圈&#xff1b;DeepSeek展现出来的核心竞争力&#xff0c;除了低成本及推理能力&#xff0c;更重要的是开源模型能力追赶上了最新的闭…

oracle使用动态sql将多层级组织展平

ERP或者其他企业管理软件中都会有一张组织机构表&#xff0c;可以写固定sql的方式将其展平获取组织表中的字段信息&#xff0c;如负责人、上级组织负责人、分管领导、成立时间等。但是这种方式有个缺陷&#xff0c;就是如果只写到处理4个层级&#xff0c;那么后期层级增多就无法…

分布式光纤传感:为生活编织“感知密网”

分布式光纤测温技术虽以工业场景为核心&#xff0c;但其衍生的安全效益已逐步渗透至日常生活。 分布式光纤测温技术&#xff08;DTS&#xff09;作为一种先进的线型温度监测手段&#xff0c;近年来在多个领域展现了其独特的优势。虽然其核心应用场景主要集中在工业、能源和基础…

本地基于GGUF部署的DeepSeek实现轻量级调优之二:检索增强生成(RAG)

前文&#xff0c;我们在本地windows电脑基于GGUF文件&#xff0c;部署了DeepSeek R1 1.5B模型&#xff0c;如果想在离线模式下加载本地的DeepSeek模型自行对进行训练时&#xff0c;是不能直接使用GGUF文件进行训练的&#xff0c;但是可以对模型进行微调&#xff0c;以下说的是第…

Win10环境借助DockerDesktop部署最新MySQL9.2

Win10环境借助DockerDesktop部署最新MySQL9.2 前言 作为一杆主要撸Java的大数据平台开发攻城狮&#xff0c;必不可少要折腾各种组件&#xff0c;环境和版本一直是很头疼的事情。虽然可以借助Anaconda来托管Python的环境&#xff0c;也可以使用多个虚拟机来部署不同的环境&…

细说STM32F407单片机RTC的基本原理及闹钟和周期唤醒功能的使用方法

目录 一、RTC基础知识 1、 RTC的功能 2、RTC工作原理 &#xff08;1&#xff09;RTC的时钟信号源 &#xff08;2&#xff09;预分频器 &#xff08;3&#xff09;实时时钟和日历数据 &#xff08;4&#xff09;周期性自动唤醒 &#xff08;5&#xff09;可编程闹钟 &a…

Docker的深入浅出

目录 Docker引擎 Docker镜像 (镜像由多个层组成&#xff0c;每层叠加之后&#xff0c;从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统&#xff08;OS&#xff09;&#xff0c;同时还包含应用运行所必须的文件和依赖包) Docker容器 应用容器化--Docker化 最佳…

Unity中自定义协程的简单实现

在 Unity 中&#xff0c;协程&#xff08;Coroutine&#xff09;是一种非常强大的工具&#xff0c;它允许我们在不阻塞主线程的情况下&#xff0c;将代码的执行分成多个步骤&#xff0c;在不同的帧中执行。 Unity中协程实现原理 迭代器与状态机&#xff1a;本质上是基于C#的迭…

【博客之星】GIS老矣尚能饭否?WebGIS项目实战经验与成果展示

目录 一、最前面的话 二、前言 1、关于“夜郎king” 3、GIS的“老骥伏枥” 4、WebGIS的“新程启航” 三、WebGIS技术简介 1、前、后技术简介 2、系统功能架构 四、WebGIS项目应用效果 1、应急灾害 2、交通运输 3、智慧文旅 4、其它项目 五、未来与展望 1、云计算…

C++中什么时候用. 什么时候用->

学了一年C今天出了一个大岔子&#xff0c;因为太久没有做链表类型题目了&#xff0c;并且STL用惯了今天遇到一题&#xff0c;写的时候发现完全不对劲&#xff0c;搞慌了&#xff0c;首先我们看题目 2. 两数相加 再看我第一次的解答&#xff0c;先不论结果对不对 错的行为有很多…

本地部署DeepSeek Nodejs版

目录 1.下载 Ollama 2.下载DeepSeek模型 3.下载 ollama.js 1.下载 Ollama https://ollama.com/ 下载之后点击安装&#xff0c;等待安装成功后&#xff0c;打开cmd窗口&#xff0c;输入以下指令&#xff1a; ollama -v 如果显示了版本号&#xff0c;则代表已经下载成功了。…

java项目之足球联赛管理系统源码(ssm+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的足球联赛管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 足球联赛管理系统的主要使用者…