【react】基础知识点学习
1. 创建项目
npm install -g create-react-app
npx create-react-app my-app
cd my-app
npm start
index.js为入口文件,App.js为根组件。
如何将react应用挂载在页面上? 将App组件渲染到id为root的DOM元素中
2. JSX
JSX是|avaScript和XML(HTML)的缩写,表示在|S代码中编写HTML模版结构,它是React中编写UI模版的方式。
JSX并不是标准的S语法,它是JS的语法扩展,浏览器本身不能识别,需要通过解析工具(babel) 做解析之后才能在浏览器中运行。
左边是我们编写的代码,右边是在浏览器中运行的代码。
👻https://babeljs.io/ 这个网址中可以查看babel预览后的结果: 点击try it out --> 左侧勾选react
✨ babel的作用有哪些?【扩展】
Babel 是一个 JavaScript 编译器,主要用于将 ECMAScript 2015+(ES6+)的代码转换为向后兼容的 JavaScript,使其能够在较老的浏览器或 JavaScript 运行环境中运行。Babel 具备以下主要作用:
- 语法转换:将现代 JavaScript 语法(如箭头函数、模板字符串、解构赋值等)转换为 ES5 或更低版本的代码,确保兼容性。
- Polyfill 提供:Babel 可以引入新的 JavaScript API(例如 Promise、Set 等)的 polyfill,从而在不支持这些 API 的环境中正常运行。(Polyfill 是一种代码或插件,用于在旧版本浏览器或不支持某些新功能的环境中“填补”缺失的功能。)
- 插件扩展:Babel 拥有丰富的插件系统,支持根据需要定制转换规则,如支持 TypeScript、React JSX 语法转换等。
- 代码优化:一些 Babel 插件可以帮助优化代码结构和性能,例如 Tree Shaking 以删除无用代码。
- 跨平台兼容:通过预设和插件的配置,Babel 可以根据不同的目标环境(如不同版本的浏览器或 Node.js)生成适用的代码。
- 工具集成:Babel 支持与许多前端构建工具集成,如 Webpack、Rollup,使得编译、打包和构建过程更加流畅。
JSX 规则
- 只能返回一个根元素 (可以用
<div></div>
或<></>
包裹)
👻<></>内不能添加 key,可以使用内置组件 Fragment - 标签必须闭合
- 大部分属性命名使用驼峰式命名法
JSX的使用
1. 基础用法
function App() {const title = "你好";const getName = () => {return "张三";};return (<div className="App">{/*使用引号传递字符串 */}{"hello react"}{/* js变量 */}{title}{/* 函数调用 */}{getName()}{/* 方法调用 */}{new Date().toDateString()}{/* 使用js对象 */}<div style={{ color: "red" }}>123</div></div>);
}
2. 列表渲染
使用map进行遍历
function App() {const fruits = [{ id: 1, name: "Apple" },{ id: 2, name: "Banana" },{ id: 3, name: "Orange" },];return (<ul>{fruits.map((fruit) => (<li key={fruit.id}>{fruit.name}</li>))}</ul>);
}
✨key 需要满足的条件 【扩展】
- key 值在兄弟节点之间必须是唯一的 (同级节点中) ,但不用要求全局唯一,在不同的数组中可以使用相同的 key。
- key 值不能改变,否则就失去了使用 key 的意义!所以千万不要在渲染时动态地生成 key。
注意:组件不会把 key 当作 props 的一部分。Key 的存在只对 React 本身起到提示,实际元素上并不会被渲染。
注意:不要使用 index 作为 key,除非列表是静态的或者元素不会发生变化。因为 index 是可变的,删除、添加元素时可能导致 React 错误匹配和重渲染问题。
3. 条件渲染
逻辑与 &&: 前面值为true时,后面内容才会被渲染
三元运算: 用于两种情况的不同显示
function App() {const isLogin = true;return (<div>{/* 逻辑与 && */}{isLogin && <h1>hello</h1>}{/* 三元运算 */}{isLogin ? <h1>欢迎回来</h1> : <h1>请先登录</h1>}</div>);
}
注意: && 表达式 的左侧为 true 时,它则返回其右侧的值。但条件的结果是 false,则整个表达式会变成 false。在 JSX 里,React 会将 false 视为一个“空值”,不会进行任何渲染。但是在 vue中false会显示在页面上!
复杂条件渲染: 根据不同条件进行渲染
function App() {const getResult = (type) => {if (type === 0) {return <h1>hello</h1>;} else if (type === 1) {return <strong>hello</strong>;} else {return <i>hello</i>;}};return <div>{getResult(1)}</div>;
}
3. 绑定事件处理函数
绑定事件:使用onClick
, 传入函数引用
function App() {const handleClick = () => {console.log("clicked");};return (<div><button onClick={handleClick}>click me</button></div>);
}
自定义传参:
function App() {const handleClick = (msg) => {console.log(msg);}return (<div><button onClick={() =>handleClick('hi')}>click me</button></div>);
}
✨注意:不能直接写函数调用,这里事件绑定需要一个函数引用。 如果写的是函数调用,会在页面渲染时就会被立即触发!!
同时传递事件对象和自定义参数: 事件对象放在最后
function App() {const handleClick = (msg,e) => {console.log(msg,e);};return (<div><button onClick={(e) => handleClick("hi",e)}>click me</button></div>);
}
4. 自定义组件
// 定义组件
function MyButton() {const handleClick = (msg, e) => {console.log(msg, e);};return (<div><button onClick={(e) => handleClick("hi", e)}>click me</button></div>);
}
function App() {return (<div>{/* 使用组件 */}<MyButton /></div>);
}export default App;
5. useState
useState
是一个 React Hook(函数),它允许我们向组件添加一个状态变量,从而控制影响组件的渲染结果。
也就是当数据发生变化时,页面也会跟着变化。(数据驱动视图)
const [state, setState] = useState(initialState)
1.useState是一个函数,返回值是一个数组
2.数组中的第一个参数是状态变量,第二个参数是set函数用来修改状态变量(直接传递新状态,也可以传递一个根据先前状态来计算新状态的函数)
3.usestate中传入初始值
import { useState } from "react";function App() {const [count, setCount] = useState(0);const handleClick = () => {// 传入更新的值setCount(count + 1);};return (<div><button onClick={handleClick}>count:{count}</button></div>);
}export default App;
如果直接更改值,ui界面不会重新更新,所以更改值要通过setXXX()来进行更新。
import { useState } from "react";function App() {let [count, setCount] = useState(0);const handleClick = () => {count++;console.log(count);// 控制台中值会更新};return (<div><button onClick={handleClick}>count:{count}</button></div>);
}export default App;
修改对象状态:
import { useState } from "react";function App() {const [data, setData] = useState({ name: "jack", age: 18 });const handleChange = () => {setData({...data,name: "jill",});// 或者传递一个根据先前状态来计算新状态的函数// setData((data) => {// return {// ...data,// name: "jill",// };// });};return (<div><div>{data.name},{data.age}</div><button onClick={handleChange}>change name</button></div>);
}export default App;
注意:如果 state 变量是一个对象时,不能只更新其中的一个字段,这样会直接替换原来的对象,导致其他属性丢失,如下错误写法:
const handleChange = () => {setData({name: "jill",});};
👻react-useState介绍
注意: 调用 set 函数 不会 改变已经执行的代码中当前的 state,它只影响 下一次 渲染中 useState 返回的内容。
const handleChange = () => {setData({...data,name: "jill",});console.log(data.name);// 输出的还是jack};
6. 样式设置
import './index.css';
function App() {return (<div>{/* 行内样式 */}<div style={{color: "red",fontWeight:'600'}}>hello</div>{/* 写在类名中 */}<div className="title">hello</div></div>);
}export default App;
/* index.css */
.title {font-size : 30px;font-weight: bold;
}
行内样式也写到一个对象中:
function App() {const titleStyle = {color: "red",fontWeight: "600",};return (<div>{/* 行内样式 */}<div style={titleStyle}>hello</div> </div>);
}export default App;
条件渲染样式:
import { useState } from "react";
import "./index.css";function App() {const [flag, setFlag] = useState(true);return (<div>{/* 写在类名中 */}<div className={`origin-class ${flag && "title"}`} onClick={() => setFlag(!flag)}>hello</div></div>);
}export default App;
使用classnames 优化类名设置:
npm i classnames
👻https://github.com/JedWatson/classnames
import classNames from "classnames";
import { useState } from "react";
import "./index.css";
function App() {const titleStyle = {color: "red",fontWeight: "600",};const [flag, setFlag] = useState(true);return (<div>{/* 行内样式 */}<div style={titleStyle}>hello</div>{/* 写在类名中 */}<div className={classNames('origin-class',{'title': flag})} onClick={() => setFlag(!flag)}>hello</div></div>);
}export default App;
7. 表单受控绑定
通过value绑定react状态,再在onChange事件中反向修改react状态。
import { useState } from "react";function App() {const [value, setValue] = useState("");return (<div><input type="text" value={value} onChange={(e) => setValue(e.target.value)}></input></div>);
}export default App;
✨ react调式工具的使用:
👻React 开发者工具
安装 React Developer Tools
在 Chrome、Firefox 等浏览器的扩展商店中搜索 “React Developer Tools” 并安装。
安装后,浏览器开发者工具(通常按 F12 或 Ctrl + Shift + I 打开)中会出现新的 “⚛️ React” 选项卡。
所以应该在生产环境下使用React 开发者工具 :
npm run build
npm install -g serve
serve -s build
显示为这种图标为可用:
8. React中获取DOM
使用useRef钩子函数引用DOM元素,获取时使用useRef 返回对象的current属性。
import { useRef, useState } from "react";function App() {const [value, setValue] = useState("");const inputRef = useRef(null);return (<div><inputtype="text"value={value}onChange={(e) => setValue(e.target.value)}ref={inputRef}></input><button onClick={() => inputRef.current.focus()}>focus</button></div>);
}export default App;
9. props父子组件传值
1.props可传递任意的数据类型:数字、字符串、布尔值、数组、对象、函数、JSX。
2.props是只读对象:子组件只能读取props中的数据,不能直接进行修改,父组件的数据只能由父组件修改。
传递单个值:
function Son(props) {return (<div><div>this is son</div><div>name:{props.name} age:{props.age}</div></div>);
}
function App() {return (<div><Son name="jack" age="18"></Son></div>);
}export default App;
传递对象:
// props中的值可以解构出来
function Son({info}) {return (<div><div>this is son</div><div>name:{info.name} age:{info.age}</div></div>);
}
function App() {const info = {name: "jack",age: "18",}return (<div><Son info={info}></Son></div>);
}export default App;
使用 children
进行插槽传值:
function Son({info,children}) {return (<div>{children}<div>this is son</div><div>name:{info.name} age:{info.age}</div></div>);
}
function App() {const info = {name: "jack",age: "18",}return (<div><Son info={info}><h2>hello</h2></Son></div>);
}export default App;
**子传父实现:**在子组件中调用父组件props传递过来的方法,将数据以参数方式传递过去。
import { useState } from "react";function Son({onGetMsg}) {return (<div><div>this is son</div><button onClick={() =>onGetMsg('world')}>sendMsg</button></div>);
}
function App() {const [msg,setMsg] = useState('hello')const getMsg = (msg) =>{setMsg(msg)}return (<div>msg:{msg}<Son onGetMsg={getMsg}></Son></div>);
}export default App;
注意:绑定事件处理函数时一定是函数的引用!!
同级组件通信: 使用状态提升,一个子组件中使用子传父方法,一个子组件中使用父传子方法将数据传递给另一个子组件。
import { useState } from "react";function A({ onGetName }) {return (<div><div>Component A</div><button onClick={() => onGetName("react")}>send to B</button></div>);
}
function B({ name }) {return (<div><div>Component B</div><h2>{name}</h2></div>);
}
// A与B之间的通信
function App() {const [name, setName] = useState("");const getName = (name) => {setName(name);};return (<div>{/*子传父*/}<A onGetName={getName}></A>{/* 父传子 */}<B name={name}></B></div>);
}export default App;
跨层级组件通信:
1.使用createContext
方法创建一个上下文对象Ctx
2.在顶层组件(App)中通过 Ctx.Provider
组件提供数据,以<Ctx.Provider value={...}>
形式。
3.在最底层组件(B)中通过 usecontext
钩子函数获取使用数据
import { createContext, useContext } from "react";// App->A->B
// 创建一个上下文对象
const MsgContent = createContext()
function A() {return (<div><B /></div>);
}
function B() {// 使用数据const msg =useContext(MsgContent)return (<div><h1>{msg}</h1></div>);
}
function App() {const msg="hello"return (<div>{/* 提供数据 */}<MsgContent.Provider value={msg}><A /></MsgContent.Provider></div>);
}export default App;
10. useEffect
useEffect是一个React Hook函数,用于在React组件中创建不是由事件引起而是由渲染本身引起的操作,比如发送AJAX请求,更改DOM,监听某一属性发生变化而进行其他操作等等。
● 与事件不同,Effect 是由渲染本身,而非特定交互引起的。
● 默认情况下,Effect 在每次渲染(包括初始渲染)后运行。
● 如果 React 的所有依赖项都与上次渲染时的值相同,则将跳过本次 Effect。
注意: 在 严格模式 下,React 在开发模式中,每个组件都会重复挂载一次。(所以这边控制台会输出2次)
import { useEffect } from "react";function App() {useEffect(() =>{console.log('渲染加载完毕!');},[])return (<div>hello</div>);
}
export default App;
清除副作用:useEffect 返回的这个回调函数,每次被卸载时会调用
import { useEffect, useState } from "react";
function A() {useEffect(() => {const timer = setInterval(() => {console.log("111");}, 2000);return () => {clearInterval(timer)}}, []);return <div>A</div>;
}
function App() {const [show, setShow] = useState(true);return (<div>{show && <A />}<button onClick={() => setShow(false)}>卸载A</button></div>);
}export default App;
11. 自定义Hook函数
自定义Hook是以 use 打头的函数,通过自定义Hook函数可以用来实现逻辑的封装和复用
import { useState } from "react";function useToggle() {const [value, setShow] = useState(true);const toggle = () => setShow(!value);return {value,toggle};
}
function App() {const {value, toggle} = useToggle();return (<div>{value && <div>hello</div>}<button onClick={toggle}>toggle</button></div>);
}export default App;
- 声明一个以use打头的函数
- 在函数体内封装可复用的逻辑(只要是可复用的逻辑)
- 把组件中用到的状态或者回调return出去(以对象或者数组)
- 在哪个组件中要用到这个逻辑,就执行这个函数,解构出来状态和回调进行使用
✨ ReactHooks使用规则:
- 只能在组件中或者其他自定义Hook函数中调用,不可以在外层调用
- 只能在组件的顶层调用,不能嵌套在if、for、其他函数中
相关文章:

【react】基础知识点学习
1. 创建项目 npm install -g create-react-app npx create-react-app my-app cd my-app npm startindex.js为入口文件,App.js为根组件。 如何将react应用挂载在页面上? 将App组件渲染到id为root的DOM元素中 2. JSX JSX是|avaScript和XML(HTML)的缩写…...
D4--哈夫曼树和不等式
看文先三连,养成好习惯~看文先三连,养成好习惯~看文先三连,养成好习惯~ 目录 知识点: 堆排序: 优先队列: 定义:(默认大顶堆) 入队: 出队: 取队顶&…...

详解RabbitMQ三种队列类型
RabbitMQ 是一个强大的消息队列系统,它提供了多种队列类型以满足不同的使用需求。本文将探讨三种主要队列类型:经典队列、仲裁队列和流式队列,并讨论它们的区别和选型建议。 经典队列(Classic Queues) 简介ÿ…...

openGauss数据库-头歌实验1-3 创建和管理模式
一、创建和使用模式 (一)任务描述 本关任务:基于 openGauss 学习创建模式的相关知识。 (二)相关知识 为了完成本关任务,你需要掌握:1.openGauss 的常用操作,2.SQL 创建模式相关语…...
森林火灾检测数据集(猫脸码客 第233期)
森林火灾检测数据集 森林火灾是一种具有巨大破坏性的自然灾害,每年在全球范围内造成巨大损失。为了有效应对森林火灾,及早发现和快速响应是至关重要的。传统上,森林火灾的检测主要依赖于人工巡逻和卫星遥感技术。然而,这些方法存…...
LeetCode100之找到字符串中所有字母异位词(438)--Java
1.问题描述 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 示例1 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 …...

【Python】Python自习课:第一个python程序
【Python】Python自习课:第一个python程序...

DICOM标准:解析DICOM属性中的病人模块
目录 病人模块概述 1. 病人关系模块(Patient Relationship Module) 2. 病人识别模块(Patient Identification Module) 3. 病人统计模块(Patient Demographic Module) 4. 病人医学模块(Pati…...

C++设计模式创建型模式———生成器模式
文章目录 一、引言二、生成器/建造者模式三、总结 一、引言 上一篇文章我们介绍了工厂模式,工厂模式的主要特点是生成对象。当对象较简单时,可以使用简单工厂模式或工厂模式;而当对象相对复杂时,则可以选择使用抽象工厂模式。 工…...

基于微信小程序的校园失物招领系统的研究与实现(V4.0)
博主介绍:✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...

DDRNet模型创新实现人像分割
项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【BiLSTM模型实现电力数据预测】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实…...
try…catch…finally语句里return语句的执行顺序是怎样的?
第一种情况 try语句块里面有return语句,catch语句块和finally语句块里面没有return语句。 代码如下: public class Main {public static void main(String[] args) {System.out.println(test1());}public static int test1() {int i 10;try {System.o…...

AIGC与虚拟现实(VR)的结合与应用前景
公主请阅 引言1. AIGC与VR的基本概念1.1 AIGC简介1.2 VR技术概述 2. AIGC在VR中的应用2.1 生成虚拟环境2.2 自动生成内容2.3 互动体验 3. AIGC与VR结合的应用案例3.1 教育培训3.2 娱乐与游戏3.3 心理治疗3.4 虚拟旅游 4. AIGC与VR结合的挑战4.1 技术限制4.2 用户体验4.3 数据隐…...

如何在visual studio中 生成 并 使用dll和lib文件
因为工作需求,要写lib和dll给别人使用。 使用visual studio2022 以函数 int getmyset() { return 0;} 为例子 首先 点击打开 visual studio 文件->新建->项目 选择windows桌面向导 选择应用程序类型为动态链接库.dll 分别创建MyDLL.h和MyDLL.cpp文件&a…...

「Mac畅玩鸿蒙与硬件15」鸿蒙UI组件篇5 - Slider 和 Progress 组件
Slider 和 Progress 是鸿蒙系统中的常用 UI 组件。Slider 控制数值输入,如音量调节;Progress 显示任务的完成状态,如下载进度。本文通过代码示例展示如何使用这些组件,并涵盖 进度条类型介绍、节流优化、状态同步 和 定时器动态更新。 关键词 Slider 组件Progress 组件节流…...

Iceoryx2:高性能进程间通信框架(中间件)
文章目录 0. 引言1. 主要改进2. Iceoryx2 的架构3. C示例代码3.1 发布者示例(publisher.cpp)3.2 订阅者示例(subscriber.cpp) 4. 机制比较5. 架构比较6. Iceoryx vs Iceoryx2参考资料 0. 引言 Iceoryx2 是一个基于 Rust 实现的开…...

构 造 器
我们创建了一个对象,在其中定义了属性,new一个对象,然后设置对应的属性,但是我们可以在new对象的时候,同时传入我们要设置的属性,这个时候就需要构造器。 特点 构造方法是一个特殊的成员方法,…...
草莓叶片病害识别与分类数据集(猫脸码客 第234期)
草莓叶片病害识别与分类数据集 草莓作为一种重要的经济作物,在全球范围内广泛种植。然而,草莓生产过程中常常受到各种病害的困扰,其中叶片病害尤为严重。为了有效识别、检测和分类草莓叶片病害,构建一个高质量的数据集是至关重要…...

微服务设计模式 - 断路器模式 (Circuit Breaker Pattern)
微服务设计模式 - 断路器模式 (Circuit Breaker Pattern) 定义 断路器模式(Circuit Breaker Pattern)是云计算和微服务架构中的一种保护性设计模式,其目的是避免系统中的调用链出现故障时,导致系统瘫痪。通过断路器模式ÿ…...

HarmonyOS NEXT 应用开发实战(九、知乎日报项目详情页实现详细介绍)
在本篇博文中,我们将探讨如何使用 HarmonyOS Next 框架开发一个知乎日报的详情页,逐步介绍所用到的组件及代码实现。知乎日报是个小巧完整的小项目,这是一个循序渐进的过程,适合初学者和有一定开发经验的工程师参考。 1. 项目背景…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...

李沐--动手学深度学习--GRU
1.GRU从零开始实现 #9.1.2GRU从零开始实现 import torch from torch import nn from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps) #初始化模型参数 def …...