六十天前端強化訓練之第十七天React Hooks 入門:useState 深度解析

=====歡迎來到編程星辰海的博客講解======

看完可以給一個免費的三連嗎,謝謝大佬!

目錄

一、知識講解

1. Hooks 是什么?

2. useState 的作用

3. 基本語法解析

4. 工作原理

5. 參數詳解

a) 初始值設置方式

b) 更新函數特性

6. 注意事項

7. 類組件對比

8. 常見問題解答

二、核心代碼示例

三、實現效果

四、學習要點總結

五、擴展閱讀推薦

官方文檔

優質文章

推薦學習路徑

進階資源

六、實踐步驟

一、表單輸入控制

二、動態列表組件

三、購物車組件(復雜狀態)

四、自定義Hook:useCart

推薦練習項目:


一、知識講解

1. Hooks 是什么?

React Hooks 是 React 16.8 引入的革命性特性,它允許開發者在函數組件中使用狀態(state)和其他 React 特性。Hooks 的誕生解決了以下問題:

  • 類組件中生命周期函數帶來的邏輯分散
  • 高階組件帶來的嵌套地獄(Wrapper Hell)
  • 函數組件無法使用狀態的局限
  • 狀態邏輯難以復用的問題

2. useState 的作用

useState 是最基礎且重要的 Hook,它讓函數組件具備管理局部狀態的能力。其核心功能包括:

  • 聲明組件內部狀態
  • 提供狀態更新方法
  • 觸發組件重新渲染
  • 保持狀態在多次渲染間的持久性

3. 基本語法解析

JAVASCRIPT

const [state, setState] = useState(initialState);

  • initialState:狀態的初始值,可以是任何數據類型
  • state:當前狀態值
  • setState:用于更新狀態的函數

4. 工作原理

  • 初始化階段:組件首次渲染時,useState 會讀取初始值并保存
  • 更新階段:調用 setState 后:
    1. 將新值加入更新隊列
    2. 觸發組件重新渲染
    3. 在下次渲染時返回更新后的狀態
  • 渲染機制:每次渲染都有獨立的狀態快照(閉包特性)

5. 參數詳解

a) 初始值設置方式

JAVASCRIPT

// 直接值初始化
const [count, setCount] = useState(0);// 函數式初始化(惰性初始化)
const [count, setCount] = useState(() => {const initialValue = calculateExpensiveValue();return initialValue;
});
b) 更新函數特性
  • 支持直接賦值更新:

    JAVASCRIPT

    setCount(5);
    
  • 支持函數式更新(推薦用于依賴前值的場景):

    JAVASCRIPT

    setCount(prevCount => prevCount + 1);
    

6. 注意事項

  • 異步更新:狀態更新是異步的,不能立即獲取到新值
  • 合并更新:React 會自動合并多個 setState 調用
  • 性能優化:使用函數式更新避免閉包陷阱
  • 不可變原則:始終返回新值而不是修改原值

7. 類組件對比

特性類組件函數組件 + useState
狀態初始化constructoruseState 參數
狀態更新方式this.setState()setState 函數
狀態訪問this.state直接使用狀態變量
生命周期依賴需要無需
代碼組織分散在各個生命周期方法中邏輯集中

8. 常見問題解答

Q:useState 和類組件的 state 有何不同?
A:useState 不會自動合并對象類型的狀態,需要手動合并

Q:為什么 setCount(count + 1) 在異步操作中不可靠?
A:由于閉包特性,異步回調中的 count 可能不是最新值,應該使用函數式更新

Q:可以在條件語句中使用 useState 嗎?
A:不行,所有 Hooks 都必須保證每次渲染的調用順序一致

Q:如何存儲復雜對象?

JAVASCRIPT

const [user, setUser] = useState({name: 'John',age: 25,address: {city: 'New York',zip: '10001'}
});// 正確更新方式
setUser(prev => ({...prev,age: 26,address: {...prev.address,zip: '10002'}
}));

二、核心代碼示例

JSX

import React, { useState } from 'react';function Counter() {// 聲明狀態變量 count 及其更新函數 setCount// 初始值設為 0const [count, setCount] = useState(0);// 定義增加計數器的方法const increment = () => {// 使用函數式更新確保基于最新狀態值setCount(prevCount => prevCount + 1);};// 定義減少計數器的方法const decrement = () => {setCount(prevCount => prevCount - 1);};// 定義重置計數器的方法const reset = () => {setCount(0);};return (<div style={styles.container}><h2>當前計數: {count}</h2><div style={styles.buttonGroup}>{/* 綁定點擊事件 */}<button style={styles.button} onClick={increment}>+</button><button style={styles.button} onClick={decrement}>-</button><button style={styles.button} onClick={reset}>重置</button></div>{/* 條件渲染提示信息 */}{count >= 10 && <p style={styles.tip}>計數已經超過10啦!</p>}</div>);
}// 樣式對象
const styles = {container: {textAlign: 'center',padding: '2rem',backgroundColor: '#f0f0f0',borderRadius: '8px',maxWidth: '400px',margin: '2rem auto'},buttonGroup: {display: 'flex',justifyContent: 'center',gap: '1rem',marginTop: '1rem'},button: {padding: '0.5rem 1rem',fontSize: '1.2rem',cursor: 'pointer',backgroundColor: '#2196f3',color: 'white',border: 'none',borderRadius: '4px',transition: 'background-color 0.3s'},tip: {color: '#d32f2f',marginTop: '1rem',fontWeight: 'bold'}
};export default Counter;

三、實現效果

計數器組件包含:

  1. 顯示當前數值的標題
  2. "+"、"-" 和 "重置" 三個操作按鈕
  3. 當數值 >=10 時顯示提示信息
  4. 按鈕懸停時的顏色變化效果
  5. 整潔的卡片式布局

四、學習要點總結

  1. 基礎概念

    • useState 是用于給函數組件添加狀態管理的 Hook
    • 遵循?const [state, setState] = useState(initialValue)?語法
  2. 使用規則

    • 只在組件的頂層調用 Hooks
    • 不要在循環、條件或嵌套函數中調用 Hooks
    • 遵循不可變原則(immutability)
  3. 最佳實踐

    • 對于復雜對象,使用擴展運算符進行合并更新
    • 異步操作時使用函數式更新確保獲取最新狀態
    • 拆分多個 useState 管理不同狀態
  4. 性能優化

    • 對于昂貴的初始化,使用函數式初始化
    • 當更新依賴前值時,必須使用函數式更新
    • 使用 React.memo 防止不必要的重新渲染
  5. 常見錯誤

    • 直接修改狀態對象

    JAVASCRIPT

    // 錯誤示例
    const [user, setUser] = useState({name: 'John'});
    user.name = 'Mike'; // 直接修改原對象
    setUser(user);      // 不會觸發更新// 正確做法
    setUser({...user, name: 'Mike'});
    
  • 在渲染函數中執行副作用操作
  • 忽視異步更新的特性

五、擴展閱讀推薦

官方文檔

  1. Hooks 簡介
  2. useState API 文檔
  3. Hooks 常見問題

優質文章

  1. useState 完全指南
  2. Hooks 原理剖析
  3. 函數式更新深入解析
  4. Hooks 最佳實踐
  5. Hooks 與類組件對比

推薦學習路徑

  1. 掌握 useState → useEffect → useContext 基礎三件套
  2. 學習自定義 Hook 實現邏輯復用
  3. 了解 useReducer 管理復雜狀態
  4. 學習性能優化相關 Hooks(useMemo/useCallback)
  5. 探索第三方 Hooks 庫(如 ahooks)

進階資源

  1. React Hooks 完全指南(免費電子書)
  2. Hooks 實現原理視頻解析
  3. Hooks 測試策略

六、實踐步驟

可以以下步驟進行實踐:

  1. 從簡單計數器開始
  2. 實現表單輸入控制
  3. 創建動態列表組件
  4. 開發帶有復雜狀態的購物車
  5. 嘗試將業務邏輯抽象為自定義 Hooks

一、表單輸入控制

JSX

import React, { useState } from 'react';function UserForm() {// 使用單個對象管理所有表單字段const [formData, setFormData] = useState({username: '',email: '',password: '',newsletter: false});// 統一處理輸入變化const handleInputChange = (e) => {const { name, value, type, checked } = e.target;setFormData(prev => ({...prev,[name]: type === 'checkbox' ? checked : value}));};// 處理表單提交const handleSubmit = (e) => {e.preventDefault();console.log('表單提交數據:', formData);alert(JSON.stringify(formData, null, 2));};return (<form style={formStyles} onSubmit={handleSubmit}><div style={inputGroup}><label>用戶名:</label><inputtype="text"name="username"value={formData.username}onChange={handleInputChange}/></div><div style={inputGroup}><label>郵箱:</label><inputtype="email"name="email"value={formData.email}onChange={handleInputChange}/></div><div style={inputGroup}><label>密碼:</label><inputtype="password"name="password"value={formData.password}onChange={handleInputChange}/></div><div style={checkboxGroup}><label><inputtype="checkbox"name="newsletter"checked={formData.newsletter}onChange={handleInputChange}/>訂閱新聞郵件</label></div><button type="submit" style={submitButton}>提交</button></form>);
}// 樣式配置
const formStyles = {maxWidth: '400px',margin: '2rem auto',padding: '2rem',backgroundColor: '#f8f9fa',borderRadius: '8px'
};const inputGroup = {marginBottom: '1rem'
};const checkboxGroup = {margin: '1rem 0'
};const submitButton = {backgroundColor: '#28a745',color: 'white',padding: '0.5rem 1rem',border: 'none',borderRadius: '4px',cursor: 'pointer'
};export default UserForm;

學習要點:

  1. 使用對象統一管理表單狀態
  2. 處理多種輸入類型(文本/復選框)
  3. 動態屬性名更新技巧([name]: value)
  4. 表單提交時訪問最新狀態

二、動態列表組件

JSX

import React, { useState } from 'react';function TodoList() {const [todos, setTodos] = useState([{ id: 1, text: '學習React Hooks', completed: false },{ id: 2, text: '練習useState', completed: true }]);const [newTodo, setNewTodo] = useState('');// 添加新待辦事項const addTodo = () => {if (newTodo.trim()) {setTodos([...todos, {id: Date.now(),text: newTodo,completed: false}]);setNewTodo('');}};// 切換完成狀態const toggleTodo = (id) => {setTodos(todos.map(todo =>todo.id === id ? { ...todo, completed: !todo.completed } : todo));};// 刪除待辦事項const deleteTodo = (id) => {setTodos(todos.filter(todo => todo.id !== id));};return (<div style={container}><h2>待辦事項列表 ({todos.length})</h2><div style={inputGroup}><inputtype="text"value={newTodo}onChange={(e) => setNewTodo(e.target.value)}placeholder="輸入新事項"style={inputStyle}/><button onClick={addTodo} style={addButton}>添加</button></div><ul style={listStyle}>{todos.map(todo => (<li key={todo.id} style={itemStyle(todo.completed)}><inputtype="checkbox"checked={todo.completed}onChange={() => toggleTodo(todo.id)}/><span style={{ flex: 1 }}>{todo.text}</span><button onClick={() => deleteTodo(todo.id)}style={deleteButton}>刪除</button></li>))}</ul></div>);
}// 樣式配置
const container = {maxWidth: '600px',margin: '2rem auto',padding: '1rem'
};const inputGroup = {display: 'flex',gap: '0.5rem',marginBottom: '1rem'
};const inputStyle = {flex: 1,padding: '0.5rem'
};const addButton = {backgroundColor: '#17a2b8',color: 'white',border: 'none',padding: '0.5rem 1rem',borderRadius: '4px',cursor: 'pointer'
};const listStyle = {listStyle: 'none',padding: 0
};const itemStyle = (completed) => ({display: 'flex',alignItems: 'center',padding: '0.5rem',margin: '0.5rem 0',backgroundColor: completed ? '#d4edda' : '#fff',border: '1px solid #ddd',borderRadius: '4px',opacity: completed ? 0.7 : 1
});const deleteButton = {backgroundColor: '#dc3545',color: 'white',border: 'none',padding: '0.25rem 0.5rem',borderRadius: '4px',cursor: 'pointer'
};export default TodoList;

學習要點:

  1. 使用數組管理動態列表
  2. 列表項的增刪改操作
  3. 正確使用key屬性
  4. 復雜狀態對象的更新方法
  5. 條件樣式渲染技巧

三、購物車組件(復雜狀態)

JSX

import React, { useState } from 'react';const initialProducts = [{ id: 1, name: '商品A', price: 100, quantity: 1 },{ id: 2, name: '商品B', price: 200, quantity: 2 }
];function ShoppingCart() {const [cart, setCart] = useState(initialProducts);const [newProduct, setNewProduct] = useState('');// 計算總價const total = cart.reduce((sum, item) => sum + (item.price * item.quantity), 0);// 添加新商品const addProduct = () => {if (newProduct.trim()) {setCart([...cart, {id: Date.now(),name: newProduct,price: Math.floor(Math.random() * 500) + 100,quantity: 1}]);setNewProduct('');}};// 更新商品數量const updateQuantity = (id, delta) => {setCart(cart.map(item => {if (item.id === id) {const newQuantity = Math.max(1, item.quantity + delta);return { ...item, quantity: newQuantity };}return item;}));};// 移除商品const removeProduct = (id) => {setCart(cart.filter(item => item.id !== id));};return (<div style={container}><h2>購物車 (總價: ¥{total})</h2><div style={inputGroup}><inputtype="text"value={newProduct}onChange={(e) => setNewProduct(e.target.value)}placeholder="輸入商品名稱"style={inputStyle}/><button onClick={addProduct} style={addButton}>添加商品</button></div><ul style={listStyle}>{cart.map(item => (<li key={item.id} style={itemStyle}><div style={itemInfo}><span style={itemName}>{item.name}</span><span>單價: ¥{item.price}</span></div><div style={quantityControls}><button onClick={() => updateQuantity(item.id, -1)}style={controlButton}>-</button><span style={quantityDisplay}>{item.quantity}</span><button onClick={() => updateQuantity(item.id, 1)}style={controlButton}>+</button></div><div style={itemSubtotal}>小計: ¥{item.price * item.quantity}<buttononClick={() => removeProduct(item.id)}style={removeButton}>刪除</button></div></li>))}</ul></div>);
}// 樣式配置
const container = {maxWidth: '800px',margin: '2rem auto',padding: '1rem'
};const inputGroup = {display: 'flex',gap: '0.5rem',marginBottom: '1rem'
};const inputStyle = {flex: 1,padding: '0.5rem'
};const addButton = {backgroundColor: '#007bff',color: 'white',border: 'none',padding: '0.5rem 1rem',borderRadius: '4px',cursor: 'pointer'
};const listStyle = {listStyle: 'none',padding: 0
};const itemStyle = {display: 'flex',justifyContent: 'space-between',alignItems: 'center',padding: '1rem',margin: '0.5rem 0',backgroundColor: '#fff',border: '1px solid #ddd',borderRadius: '4px'
};const itemInfo = {flex: 2,display: 'flex',flexDirection: 'column',gap: '0.5rem'
};const itemName = {fontWeight: 'bold'
};const quantityControls = {display: 'flex',alignItems: 'center',gap: '0.5rem'
};const controlButton = {padding: '0.25rem 0.5rem',minWidth: '32px',backgroundColor: '#6c757d',color: 'white',border: 'none',borderRadius: '4px',cursor: 'pointer'
};const quantityDisplay = {minWidth: '30px',textAlign: 'center'
};const itemSubtotal = {flex: 1,display: 'flex',flexDirection: 'column',alignItems: 'flex-end',gap: '0.5rem'
};const removeButton = {backgroundColor: '#dc3545',color: 'white',border: 'none',padding: '0.25rem 0.5rem',borderRadius: '4px',cursor: 'pointer'
};export default ShoppingCart;

學習要點:

  1. 多層嵌套狀態的管理
  2. 復雜狀態更新模式
  3. 派生狀態(總價)的計算
  4. 不可變數據更新模式
  5. 復雜組件的樣式組織

四、自定義Hook:useCart

JSX

// useCart.js
import { useState } from 'react';function useCart(initialItems = []) {const [cart, setCart] = useState(initialItems);const total = cart.reduce((sum, item) => sum + (item.price * item.quantity), 0);const addItem = (newItem) => {setCart([...cart, {...newItem,id: Date.now(),quantity: 1}]);};const updateQuantity = (itemId, delta) => {setCart(currentCart =>currentCart.map(item =>item.id === itemId? { ...item, quantity: Math.max(1, item.quantity + delta) }: item));};const removeItem = (itemId) => {setCart(currentCart => currentCart.filter(item => item.id !== itemId));};return {cart,total,addItem,updateQuantity,removeItem};
}export default useCart;// 使用示例
function CartComponent() {const { cart, total, addItem, updateQuantity, removeItem } = useCart();// ...組件實現與前面購物車示例類似
}

學習要點:

  1. 自定義Hook的命名規范(必須用use開頭)
  2. 狀態邏輯的封裝
  3. Hook之間的通信
  4. 返回可操作的方法集
  5. 實現業務邏輯復用

推薦練習項目:

  • 個人博客系統
  • 任務管理系統(類似Trello)
  • 電子商務平臺
  • 實時數據監控儀表盤

學完后建議弄清以下問題:

  1. 狀態更新的原理是什么?
  2. 如何避免不必要的重新渲染?
  3. 復雜狀態如何組織更合理?
  4. 如何調試狀態變化?
  5. 如何測試Hook相關邏輯?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897913.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897913.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897913.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IEC61850標準下MMS 緩存報告控制塊 ResvTms詳細解析

IEC61850標準是電力系統自動化領域唯一的全球通用標準。IEC61850通過標準的實現&#xff0c;使得智能變電站的工程實施變得規范、統一和透明&#xff0c;這大大提高了變電站自動化系統的技術水平和安全穩定運行水平。 在 IEC61850 標準體系中&#xff0c;ResvTms&#xff08;r…

【JVM】GC 常見問題

GC 常見問題 哪些情況新生代會進入老年代 新生代 GC 后幸存區&#xff08;survivor&#xff09;不夠存放存活下來的對象&#xff0c;會通過內存擔保機制晉升到老年代。大對象直接進入老年代&#xff0c;因為大對象再新生代之間來會復制會影響 GC 性能。由 -XX:PretenureSizeT…

Audacity 技術淺析(一)

Audacity 是一個開源的音頻編輯工具&#xff0c;雖然它主要用于音頻編輯和處理&#xff0c;但也可以通過一些插件和功能實現基本的音頻生成功能。 1. Audacity 的音頻生成基礎 Audacity 的音頻生成主要依賴于其內置的生成器、效果器以及 Nyquist 編程語言。這些工具允許用戶創…

G-Star 公益行起航,揮動開源技術點亮公益!

公益組織&#xff0c;一直是社會溫暖的傳遞者&#xff0c;但在數字化浪潮中&#xff0c;也面臨著諸多比大眾想象中復雜的挑戰&#xff1a;項目管理如何更高效&#xff1f;志愿者管理又該如何創新&#xff1f;宣傳推廣怎么才能更有影響力&#xff1f;內部管理和技術支持又該如何…

MongoDB 數據導出與導入實戰指南(附完整命令)

1. 場景說明 在 MongoDB 運維中&#xff0c;數據備份與恢復是核心操作。本文使用 mongodump 和 mongorestore 工具&#xff0c;演示如何通過命令行導出和導入數據&#xff0c;解決副本集連接、路徑指定等關鍵問題。 2. 數據導出&#xff08;mongodump&#xff09; 2.1 導出命…

京東 h5st 5.1 分析

聲明: 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 逆向分析 學習了2天某物&#xff0c;f…

CentOS 系統安裝 docker 以及常用插件

博主用的的是WindTerm軟件鏈接的服務器&#xff0c;因為好用 1.鏈接上服務器登入后&#xff0c;在/root/目錄下 2.執行以下命令安裝docker sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.reposudo…

不像人做的題————十四屆藍橋杯省賽真題解析(上)A,B,C,D題解析

題目A&#xff1a;日期統計 思路分析&#xff1a; 本題的題目比較繁瑣&#xff0c;我們采用暴力加DFS剪枝的方式去做&#xff0c;我們在DFS中按照8位日期的每一個位的要求進行初步剪枝找出所有的八位子串&#xff0c;但是還是會存在19月的情況&#xff0c;為此還需要在CHECK函數…

【redis】set 類型:基本命令

文章目錄 基本概念SADD 和 SMEMBERSSCARDSPOPSRANDMEMBERSMOVESREM集合間操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 命令小結內部編碼 基本概念 談到一個屬于&#xff0c;這個術語可能有多種含義&#xff0c;set 集合設置&#xff08;和 get 相對應&#xff09…

C 語言進【進階篇】之動態內存管理:從底層機制到實戰優化

目錄 &#x1f680;前言&#x1f31f;動態內存分配的必要性&#x1f914;動態內存分配函數深度剖析&#x1f4af;malloc函數&#xff1a;內存申請的主力軍&#x1f4af;free函數&#xff1a;釋放內存的“清道夫”&#x1f4af;calloc函數&#xff1a;初始化內存的利器&#x1f…

2023華東師范大學計算機復試上機真題

2023華東師范大學計算機復試上機真題 2022華東師范大學計算機復試上機真題 2021華東師范大學計算機復試上機真題 2023華東師范大學計算機復試機試真題 2022華東師范大學計算機復試機試真題 2021華東師范大學計算機復試機試真題 在線評測&#xff1a;傳送門&#xff1a;pgcode.…

Mac下安裝Zed以及Zed對MCP(模型上下文協議)的支持

Zed是當前新流行的一種編輯器&#xff0c;支持MCP&#xff08;模型上下文協議&#xff09; Mac下安裝Zed比較簡單&#xff0c;直接有安裝包&#xff0c;在這里&#xff1a; brew install --cask zedMac Monterey下是可以安裝上的&#xff0c;親測有效。 配置 使用CtrlShiftP…

Spring Boot 約定大于配置:實現自定義配置

文章目錄 Spring Boot 約定大于配置&#xff1a;實現自定義配置引言1. Spring Boot 的約定大于配置2. 自定義配置的需求3. 實現自定義配置的步驟4. 示例&#xff1a;自定義 Spring MVC 配置4.1 創建自定義配置類4.2 創建自定義攔截器4.3 測試自定義配置 5. 其他自定義配置場景5…

交易系統優化方案

證券交易系統優化方案 一、選股策略體系 (一)擇時策略矩陣 尾盤集中篩選法(14:30后)聚焦量價異動個股,捕捉次日溢價機會早盤轉債套利法(9:25-10:00)通過可轉債與正股聯動性捕捉日內機會龍頭戰法(全時段)行業板塊強度排序,鎖定前三大市值龍頭容量資金戰法(中盤股適用…

在線Doc/Docx轉換為PDF格式 超快速轉換的一款辦公軟件 文檔快速轉換 在線轉換免費轉換辦公軟件

小白工具https://www.xiaobaitool.net/files/word-pdf/提供了一項非常實用的在線服務——將Doc或Docx格式的文檔快速轉換為PDF格式。這項服務不僅操作簡單&#xff0c;而且轉換效率高&#xff0c;非常適合需要頻繁處理文檔轉換的用戶。 服務特點&#xff1a; 批量轉換&#x…

java學習總結(四)MyBatis多表

一、多表結構 學生表、班級表、課程表、班級課程表 二、一對一 一個學生只屬于一個班級。 查詢&#xff1a;id name age gender banjiName SELECT s.id,s.name,s.age,s.gender,b.id AS banjiId,b.name AS banjiName FROM student AS s INNER JOIN banji AS b ON s.banji_id…

大語言模型學習及復習筆記(1)語言模型的發展歷程

1.大模型進入人們視野 ChatGPT 于2022年11月底上線 模型名稱 發布時間 核心突破 GPT-3 2020年6月 首款千億參數模型&#xff0c;少樣本學習 GPT-3.5-Turbo 2022年11月 對話能力優化&#xff0c;用戶級應用落地 GPT-4 2023年3月 多模態、強邏輯推理 GPT-4o / GPT-4…

【NLP】 3. Distributional Similarity in NLP(分布式相似性)

Distributional Similarity in NLP&#xff08;分布式相似性&#xff09; 分布式相似性&#xff08;Distributional Similarity&#xff09; 是自然語言處理&#xff08;NLP&#xff09;中的核心概念&#xff0c;基于“相似的單詞出現在相似的上下文中”這一假設。它用于衡量單…

【C#學習】協程等待

來源GPT&#xff0c;僅記錄學習 yield return WaitForEndOfFrame() 適用于 渲染結束后再執行代碼&#xff0c;但 WebGL 可能不適合這個操作&#xff0c;會拖慢幀率。(渲染得太慢&#xff09; yield return null; 讓代碼在下一幀的 Update() 里繼續運行&#xff0c;更加流暢。 …

【項目】負載均衡式在線OJ

負載均衡式在線OJ 目錄 負載均衡式在線OJ 1.項目介紹&#xff1a; 2.comm 2.1 log.hpp 日志等級 開放式日志 時間戳工具 2.2 util.hpp TimeUtil類 PathUtil類 FileUtil類 StringUtil類 3.Compile_server 3.1compile_run.hpp RemoveTempFile CodeToDesc Start 3.…