Redux 和 MobX 高頻面試題

Redux 和 MobX 是 React 生態中的兩大狀態管理方案,在面試中常涉及 原理、使用方式、對比、最佳實踐 等方面。以下是 高頻面試題 + 詳細答案,助你輕松應對面試!🚀


🔥 Redux 部分

1. Redux 是什么?為什么需要 Redux?

Redux 是一個 可預測的狀態管理容器,用于管理應用的全局狀態。適用于:

  • 組件間 狀態共享
  • 數據流可預測,方便調試
  • 適用于 大型復雜應用

2. Redux 的核心概念有哪些?

Redux 由 三大核心概念 組成:

  1. Store(存儲全局狀態)
  2. Action(描述狀態變化的對象)
  3. Reducer(處理 state 變化的純函數)

3. Redux 的數據流是什么樣的?

Redux 采用 單向數據流

組件 (dispatch action) → Redux Store → Reducer 計算新 state → 組件更新 UI

4. 如何在 React 中使用 Redux?

import { createStore } from 'redux';// 定義 reducer
const reducer = (state = { count: 0 }, action) => {if (action.type === 'INCREMENT') return { count: state.count + 1 };return state;
};// 創建 store
const store = createStore(reducer);// 發送 action
store.dispatch({ type: 'INCREMENT' });console.log(store.getState()); // { count: 1 }

5. Redux 和 React Context 有什么區別?

對比項ReduxReact Context
適用場景復雜狀態管理輕量級全局狀態共享
性能只更新相關組件Context 可能導致額外渲染
調試工具Redux DevTools無專門調試工具
中間件Redux Thunk / Saga

Redux 適用于 復雜狀態管理,而 Context 適用于 簡單的全局狀態共享


6. Redux 中間件是什么?常見的 Redux 中間件有哪些?

Redux 中間件 作用:

  • 處理異步操作
  • 記錄日志 / 錯誤處理
  • 修改 action

常見 Redux 中間件:

  1. Redux Thunk(處理異步 action)
  2. Redux Saga(基于 generator 的異步流)
  3. Redux Logger(日志記錄)

7. Redux Thunk 和 Redux Saga 的區別是什么?

對比項Redux ThunkRedux Saga
原理直接在 action 中處理異步邏輯使用 generator 處理異步流
適用場景簡單異步請求復雜異步流程(如輪詢、并行)
代碼復雜度較低較高

8. Redux Toolkit(RTK)是什么?

RTK 是 Redux 官方推薦的 簡化版 Redux,提供:

  • createSlice()(自動生成 action 和 reducer)
  • configureStore()(簡化 store 配置)
  • 內置 Redux Thunk

示例:

import { createSlice, configureStore } from '@reduxjs/toolkit';const counterSlice = createSlice({name: 'counter',initialState: { count: 0 },reducers: {increment: (state) => { state.count += 1; }}
});const store = configureStore({ reducer: counterSlice.reducer });store.dispatch(counterSlice.actions.increment());
console.log(store.getState()); // { count: 1 }

🔥 MobX 部分

9. MobX 是什么?它和 Redux 有什么區別?

MobX 是 響應式的狀態管理庫,相比 Redux:

  • MobX 基于“觀察者模式”(自動追蹤數據變化)
  • 代碼更簡潔,沒有 actionreducer
  • MobX 適合中小型項目,Redux 適合大型項目

10. MobX 的核心概念有哪些?

  1. Observable(可觀察狀態)
  2. Computed(計算派生值)
  3. Action(修改狀態的方法)
  4. Observer(自動監聽 state 變化的組件)

11. 如何在 React 中使用 MobX?

import { makeAutoObservable } from 'mobx';
import { observer } from 'mobx-react-lite';class CounterStore {count = 0;constructor() { makeAutoObservable(this); }increment() { this.count++; }
}const store = new CounterStore();const Counter = observer(() => (<div><p>{store.count}</p><button onClick={() => store.increment()}>+1</button></div>
));

MobX 特點:

  • 直接修改 store.count++
  • 組件 observer() 自動更新 UI

12. Redux 和 MobX 的數據流有什么不同?

對比項ReduxMobX
數據流單向數據流響應式雙向綁定
修改 state通過 action/reducer直接修改 observable
學習成本較高較低

13. MobX 的 observablecomputed 有什么區別?

  • observable:可觀察的數據狀態
  • computed:派生值,僅在依賴改變時重新計算
import { makeAutoObservable } from 'mobx';class Store {count = 2;constructor() { makeAutoObservable(this); }get doubleCount() { return this.count * 2; } // computed
}const store = new Store();
console.log(store.doubleCount); // 4

14. MobX 的 actionrunInAction 有什么區別?

  • action:定義可修改 state 的方法
  • runInAction:在代碼塊中執行多個 state 修改
import { makeAutoObservable, runInAction } from 'mobx';class Store {count = 0;constructor() { makeAutoObservable(this); }increment() { this.count++; }
}const store = new Store();runInAction(() => {store.count = 5;store.count = 10;
});
console.log(store.count); // 10

15. Redux 和 MobX 哪個性能更好?

MobX 更快

  • MobX 自動追蹤狀態變化,只更新受影響組件
  • Redux 觸發全局 re-render,依賴 connect() 優化

🔥 適用場景總結

對比項ReduxMobX
適用場景大型復雜應用小型/中型應用
代碼復雜度需要手寫 reducer直接修改 state
性能可能有額外 re-render自動優化更新
學習成本較高較低

如果項目 狀態復雜、團隊協作,建議用 Redux
如果追求 簡單、快速開發,可以選 MobX


這 15 道 Redux & MobX 高頻面試題 你學會了嗎?😃 🚀

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

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

相關文章

Excel 保護工作簿:它能解決哪些問題?如何正確使用?

在日常辦公中&#xff0c;Excel 表格常常涉及多人協作、重要數據保護&#xff0c;甚至是避免誤操作的情況。這時候&#xff0c;“保護工作簿”功能就能派上用場。它能有效防止他人修改表結構、刪除工作表&#xff0c;甚至可以設置密碼&#xff0c;確保數據的完整性和安全性。今…

Android Retrofit 框架注解定義與解析模塊深度剖析(一)

一、引言 在現代 Android 和 Java 開發中&#xff0c;網絡請求是不可或缺的一部分。Retrofit 作為 Square 公司開源的一款強大的類型安全的 HTTP 客戶端&#xff0c;憑借其簡潔易用的 API 和高效的性能&#xff0c;在開發者社區中廣受歡迎。Retrofit 的核心特性之一便是通過注…

C# Enumerable類 之 數據分組

總目錄 前言 在 C# 中&#xff0c;System.Linq.Enumerable 類是 LINQ&#xff08;Language Integrated Query&#xff09;的核心組成部分&#xff0c;它提供了一系列靜態方法&#xff0c;用于操作實現了 IEnumerable 接口的集合。通過這些方法&#xff0c;我們可以輕松地對集合…

推理模型對SQL理解能力的評測:DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet

引言 隨著大型語言模型&#xff08;LLMs&#xff09;在技術領域的應用日益廣泛&#xff0c;評估這些模型在特定技術任務上的能力變得越來越重要。本研究聚焦于四款領先的推理模型——DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet在SQL理解與分析方面的能力&#xff0c;…

IDEA接入阿里云百煉中免費的通義千問[2025版]

安裝deepseek 上一篇文章IDEA安裝deepseek最新教程2025中說明了怎么用idea安裝codeGPT插件&#xff0c;并接入DeepSeek&#xff0c;無奈接入的官方api已經不能使用了&#xff0c;所以我們嘗試從其他地方接入 阿里云百煉https://bailian.console.aliyun.com/ 阿里云百煉?是阿…

實施一套先進的智能攝像頭服務系統。

一、項目背景 隨著物聯網、人工智能和大數據技術的飛速發展&#xff0c;智能攝像頭已成為家庭、企業以及公共安全領域的重要設備。其便捷、高效、智能的特點&#xff0c;使得市場需求日益增長。為了滿足用戶對智能監控的多樣化需求&#xff0c;提供更加全面、可靠的監控服務&a…

linux自啟動服務

在Linux環境中&#xff0c;systemd是一個系統和服務管理器&#xff0c;它為每個服務使用.service文件進行配置。systemctl是用于控制系統服務的主要工具。本文將詳細介紹如何使用systemctl來管理vsftpd服務&#xff0c;以及如何設置服務自啟動。 使用Systemd設置自啟動服務 創…

010-Catch2

Catch2 一、框架簡介 Catch2 是一個基于 C 的現代化單元測試框架&#xff0c;支持 TDD&#xff08;測試驅動開發&#xff09;和 BDD&#xff08;行為驅動開發&#xff09;模式。其核心優勢在于&#xff1a; 單頭文件設計&#xff1a;v2.x 版本僅需包含 catch.hpp 即可使用自然…

數字人分身開發指南:從概念到實戰

一、什么是數字人分身&#xff1f; 想象一下&#xff0c;在電腦或手機屏幕里&#xff0c;一個能跟你聊天、回答問題&#xff0c;甚至還能做表情的虛擬角色。這就是數字人分身&#xff0c;它用上了人工智能技術&#xff0c;讓機器也能像人一樣交流。無論是在線客服、網絡主播還…

Pixelmator Pro for Mac 專業圖像處理軟件【媲美PS的修圖】

介紹 Pixelmator Pro&#xff0c;是一款非常強大、美觀且易于使用的圖像編輯器&#xff0c;專為 Mac 設計。采用單窗口界面、基于機器學習的智能圖像編輯、自動水平檢測&#xff0c;智能快速選擇及更好的修復工具等功能優點。許多非破壞性的專業編輯工具可讓您進行最佳的照片處…

LiveGBS流媒體平臺GB/T28181常見問題-視頻流安全控制HTTP接口鑒權勾選流地址鑒權后401Unauthorized如何播放調用接口流地址校驗

LiveGBS流媒體平臺GB/T28181常見問題頻流安全控制HTTP接口鑒權勾選流地址鑒權后401Unauthorized如何播放調用接口流地址校驗&#xff1f; 1、安全控制1.1、HTTP接口鑒權1.2、流地址鑒權 2、401 Unauthorized2.1、攜帶token調用接口2.1.1、獲取鑒權token2.1.2、調用其它接口2.1.…

C++設計模式-抽象工廠模式:從原理、適用場景、使用方法,常見問題和解決方案深度解析

一、模式基本概念 1.1 定義與核心思想 抽象工廠模式&#xff08;Abstract Factory Pattern&#xff09;是創建型設計模式的集大成者&#xff0c;它通過提供統一的接口來創建多個相互關聯或依賴的對象族&#xff0c;而無需指定具體類。其核心思想體現在兩個維度&#xff1a; …

【prompt實戰】知乎問題解答專家

本文原創作者&#xff1a;姚瑞南 AI-agent 大模型運營專家&#xff0c;先后任職于美團、獵聘等中大廠AI訓練專家和智能運營專家崗&#xff1b;多年人工智能行業智能產品運營及大模型落地經驗&#xff0c;擁有AI外呼方向國家專利與PMP項目管理證書。&#xff08;轉載需經授權&am…

數據結構第八節:紅黑樹(初階)

【本節要點】 紅黑樹概念紅黑樹性質紅黑樹結點定義紅黑樹結構紅黑樹插入操作的分析 一、紅黑樹的概念與性質 1.1 紅黑樹的概念 紅黑樹 &#xff0c;是一種 二叉搜索樹 &#xff0c;但 在每個結點上增加一個存儲位表示結點的顏色&#xff0c;可以是 Red和 Black 。 通過對 任何…

Spring Boot3.3.X整合Mybatis-Plus

前提說明&#xff1a; 項目的springboot版本為&#xff1a;3.3.2 需要整合的mybatis-plus版本&#xff1a;3.5.7 廢話不多說&#xff0c;開始造吧 1.準備好數據庫和表 2.配置全局文件application.properties或者是application.yml&#xff08;配置mapper的映射文件路徑&am…

可視化圖解算法:鏈表指定區間反轉

1. 題目 描述 給你單鏈表的頭指針 head 和兩個整數 left 和 right &#xff0c;其中 left < right 。請你反轉從位置 left 到位置 right 的鏈表節點&#xff0c;返回 反轉后的鏈表 。 示例1 輸入&#xff1a; 輸入&#xff1a;head [1,2,3,4,5], left 2, right 4 輸…

?SQL-遞歸CTE

&#x1f4d6; SQL魔法課堂&#xff1a;CTE「時間折疊術」全解 &#x1f3a9; 第一章&#xff1a;什么是CTE&#xff1f; CTE&#xff08;Common Table Expression&#xff09; 就像 SQL 里的「臨時筆記本」&#x1f4d2;&#xff1a; WITH 臨時筆記本 AS ( SELECT ... FRO…

Cursor 新手入門使用教程

一、Cursor 是什么&#xff1f; Cursor 是一個集成了 GPT-4、Claude 3.5 等先進 LLM&#xff08;大語言模型&#xff09;的類 VSCode 編譯器&#xff0c;可以理解為在 VSCode 中集成了 AI 輔助編程助手。從界面布局來看&#xff0c;Cursor 與 VSCode 基本一致&#xff0c;且使…

如何在Spring Boot中配置和使用MyBatis-Plus

在當今的Java開發中&#xff0c;Spring Boot已經成為了一個非常流行的框架&#xff0c;而MyBatis-Plus則是一個強大的ORM框架&#xff0c;為開發人員提供了更簡便的數據庫操作方式。很多開發者都在使用Spring Boot和MyBatis-Plus的組合來快速構建高效的應用。今天就來聊聊如何在…

【貪心算法3】

力扣1005.k次取反后最大化的數組和 鏈接: link 思路 既然要求最大和&#xff0c;那么不妨先給數組排個序&#xff0c;如果有負數&#xff0c;先處理負數從前往后給數組取反&#xff0c;如果負數處理完后k還有次數&#xff0c;此時數組全是正數了&#xff0c;只需要對第一個元…