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.mzph.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;只需要对第一个元…