当前位置: 首页 > news >正文

用 nextjs 创建 Node+React Demo

1、环境准备

1、安装Node
访问Node官网下载对应Node版本:Node官网,安装成功后通过命令查看当前node版本

node -v

2、安装Node版本管理工具nvm
如果nvm install 安装node失败,一般是网络问题,可以用手机热点或者翻墙

# 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash#查看远程版本
nvm ls-remote#查看本地版本
nvm ls# 安装node
nvm install 18.20.4# 切换版本
nvm use 18.20.4# 查看当前的node版本
node -v

3、安装VSCode
去官网下载并安装VSCode, VSCode

2、创建next js工程

1、next js官网,next js官网
通过如下命令创建工程

npx create-next-app@latest my-first-next-app

创建完成如下
在这里插入图片描述
2、通过npm run dev即可编译部署,然后通过http://localhost:3000/即可访问,这里自动打包编译 (使用 webpack 和 babel)

#编译部署
npm run dev#浏览器访问
http://localhost:3000/

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

3、热重载+路由+静态资源

1、热重载
修改 app/page.tsx 文件中的内容,然后保存,浏览器中的内容自动更新了,这就是 Next.js 的热重载特性,它能大大提高开发效率,添加新的页面也能热重载。

2、路由使用方法
App目录每个文件夹代表一个路由,这里在test目录增加了1个页面,文件名必须是page.tsx,访问路径为http://localhost:3000/test
在这里插入图片描述
3、静态资源引用
在根目录下新建static文件夹,代码可以通过/static/来引入相关的静态资源。
在这里插入图片描述
在这里插入图片描述

4、客户端渲染和服务端渲染

默认是服务端渲染,服务端渲染不能使用React组件,React组件需要声明为客户端渲染。

'use client';import React, {Component} from "react";export default class extends Component<any, any> {static async getInitialProps({ req }) {const userAgent = req ? req.headers['user-agent'] : navigator.userAgentreturn { userAgent }}render() {return (<div>Hello World {this.props.userAgent}</div>)}
}

5、路由跳转及数据获取,函数组件使用

1、通过Link跳转,需要直接点击一个文字

import Link from 'next/link'export default function Home() {return (<div><Link href={{ pathname: '/test/test2', query: { name: 'tangfuling' }}}>点我跳转</Link></div>);
} 

2、通过Navigation跳转,可以通过OnClick代码调用,Router.push会留下新的历史记录,Router.reaplace不会留下新的历史记录

'use client';import Link from 'next/link'
import { useRouter } from 'next/navigation'export default function Home() {const Router = useRouter();function handleClick() {Router.push('/test/test2?name=tangfuling')}return (<div><Link href={{pathname: '/test/test2', query: {name: 'tangfuling'}}}>点我跳转</Link><br/><button onClick={handleClick}>Go to Another Page</button></div>);
}

3、通过useSearchParams获取参数,只能在函数组件中使用,而不能在类组件中使用。

'use client';import React from "react";
import { useSearchParams } from 'next/navigation';export default function Test3() {const searchParams = useSearchParams();const name = searchParams.get('name');return (<div>test3 {searchParams.get('name')}<br/></div>);
}

6、路由跳转及数据获取,React类组件使用

类组件不能通过useSearchParams接数据,需要通过window.location.search接数据
1、通过window.location.href跳转

'use client';import Link from 'next/link'
import { useRouter } from 'next/navigation'export default function Home() {const Router = useRouter();function handleClick1() {Router.push('/test/test2?name=tangfuling')}function handleClick2() {window.location.href = '/test/test3?name=tangfuling';}return (<div><Link href={'/test/test2?name=tangfuling'}>Link跳转函数组件test2</Link><br/><button onClick={handleClick1}>点击跳转函数组件test2</button><br/><button onClick={handleClick2}>点击跳转类组件test3</button></div>);
}

2、通过Navigation跳转

'use client';import Link from 'next/link'
import { useRouter } from 'next/navigation'export default function Home() {const Router = useRouter();function handleClick1() {Router.push('/test/test2?name=tangfuling')}function handleClick2() {window.location.href = '/test/test3?name=tangfuling';}function handleClick3() {Router.push('/test/test3?name=tangfuling')}return (<div><Link href={'/test/test2?name=tangfuling'}>Link跳转函数组件test2</Link><br/><button onClick={handleClick1}>点击跳转函数组件test2</button><br/><button onClick={handleClick2}>点击跳转类组件test3,window方式</button><br/><button onClick={handleClick3}>点击跳转类组件test3,push方式</button></div>);
}

3、通过window.location.search接数据,类组件不能通过useSearchParams接数据

'use client';import React, { Component } from 'react';export default class Test3 extends Component<any, any> {constructor(props) {super(props);this.state = {name: '',};}componentDidMount() {const urlParams = new URLSearchParams(window.location.search);const name = urlParams.get('name');this.setState({ name });}static async getInitialProps({ query }) {const { name } = query;return { name };}render() {return (<div>test3 {this.state.name}<br/></div>);}
}

4、通过window.open完全打开一个新的Tab

'use client';import Link from 'next/link'
import { useRouter } from 'next/navigation'export default function Home() {const Router = useRouter();function handleClick1() {Router.push('/test/test2?name=tangfuling')}function handleClick2() {window.location.href = '/test/test3?name=tangfuling';}function handleClick3() {Router.push('/test/test3?name=tangfuling')}function handleClick4() {window.open('/test/test3?name=tangfuling')}return (<div><Link href={'/test/test2?name=tangfuling'}>Link跳转函数组件test2</Link><br/><button onClick={handleClick1}>点击跳转函数组件test2</button><br/><button onClick={handleClick2}>点击跳转类组件test3,window方式</button><br/><button onClick={handleClick3}>点击跳转类组件test3,push方式</button><br/><button onClick={handleClick4}>点击跳转类组件test3,新页面</button></div>);
}

7、几种跳转的区别

页面跳转:
router跳转:当前页面局部刷新
window.location跳转:当前页面全部刷新
window.open跳转:打开新页面

接收参数:
useSearchParams接收参数:只能在函数组件使用,类组件不可以使用
window.location.search接收参数:函数组件和类组件都可以使用

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C/C++语言基础--从C到C++的不同(下),15个部分说明C与C++的不同
  • 裸土检测算法实际应用、裸土检测算法样本、裸土检测算法精准检测
  • Python 解析 JSON 数据
  • 开源模型应用落地-qwen模型小试-调用Qwen2-VL-7B-Instruct-更清晰地看世界(一)
  • 配置与变更管理考点提要
  • TeamTalk梳理概括
  • 带你走进vue3
  • Porcupine - 语音关键词唤醒引擎
  • Vue 3有哪些新特性
  • Linux5-echo,>,tail
  • 站群服务器适用于哪些场景当中?
  • 算法入门-贪心1
  • wordpress源码资源站整站打包32GB数据,含6.7W条资源数据
  • vscode中如何配置c/c++环境
  • C++ Linux多线程同步通信-信号量
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • conda常用的命令
  • Druid 在有赞的实践
  • in typeof instanceof ===这些运算符有什么作用
  • Java 多线程编程之:notify 和 wait 用法
  • Java 最常见的 200+ 面试题:面试必备
  • Javascript设计模式学习之Observer(观察者)模式
  • Logstash 参考指南(目录)
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • overflow: hidden IE7无效
  • Sass 快速入门教程
  • Shadow DOM 内部构造及如何构建独立组件
  • Spring Cloud中负载均衡器概览
  • ubuntu 下nginx安装 并支持https协议
  • Vue官网教程学习过程中值得记录的一些事情
  • 安装python包到指定虚拟环境
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 每天一个设计模式之命令模式
  • 前端相关框架总和
  • 区块链共识机制优缺点对比都是什么
  • 容器服务kubernetes弹性伸缩高级用法
  • 新版博客前端前瞻
  • Spring Batch JSON 支持
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 交换综合实验一
  • 整理一些计算机基础知识!
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​ArcGIS Pro 如何批量删除字段
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (02)vite环境变量配置
  • (175)FPGA门控时钟技术
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (9)目标检测_SSD的原理
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置