Redux 的调试工具及优化经验分享

Redux 的调试工具及优化经验分享

Redux 是一种用于管理 JavaScript 应用程序的状态的极为流行的开源库,其提供了一种可预测的状态管理。但是,Redux 的开发过程中难免会遇到一些问题,特别是在调试和优化方面。在本文中,我们将介绍一些最好的 Redux 调试工具,并分享一些有关优化 Redux 应用程序的经验。

一、Redux 调试工具

  1. Redux DevTools

Redux DevTools 是开发者的常规选择。 它是一个浏览器插件和独立应用程序,它提供了一个简单的界面,用于检查 global state,分发操作和监视组件。 它支持导出和导入,以便您记录操作并与同事共享它们。

安装方法:

  • 对于 Chrome,Firefox 和 Opera,请访问 Redux DevTools 扩展页面并安装。
  • 对于其他浏览器,请下载 DevTools 的源代码或使用独立应用程序版本。
  1. Redux-Logger

Redux-Logger 是一个基本上不需要配置的日志记录器,可以直接安装并开始使用。它在控制台中输出有关每次分发操作的信息。

安装方法:使用 NPM 安装:

npm install redux-logger

将 Logger 应用于 Store:

import { createStore, applyMiddleware } from 'redux'; import logger from 'redux-logger'; import rootReducer from './reducers';

export default function configureStore(initialState) { const store = createStore( rootReducer, initialState, applyMiddleware(logger) );

return store; }

  1. Redux-Tools

Redux-Tools 是一个独立的桌面应用程序,可以让开发者直观地查看应用程序中的 action、reducer以及 virtual state。 它还为特定重现情况提供了一个“暴力计时旅行”调试器,并支持对操作进行筛选,以更好地查看有关特定操作的信息。

安装方法:通过前端包管理工具 NPM 进行安装。

运行以下命令即可:

npm install --save-dev redux-devtools

集成到 Redux 应用程序中:

import { createStore, applyMiddleware, compose } from 'redux'; import rootReducer from './reducers'; import DevTools from './containers/DevTools';

const enhancer = compose( // Middleware you want to use in development: applyMiddleware(d1, d2, d3), // Required! Enable Redux DevTools with the monitors you chose DevTools.instrument() );

export default function configureStore(initialState) { const store = createStore(rootReducer, initialState, enhancer);

// Hot reload reducers (requires Webpack or Browserify HMR to be enabled) if (module.hot) { module.hot.accept('./reducers', () => store.replaceReducer(require('./reducers')) ); }

return store; }

二、优化 Redux 经验

  1. 减少状态树的嵌套

如果迭代列表中的子节点,可以使用“平坦化”状态树。 这可以将状态更高效地更新,但是需要更多的代码来组成 state,但是这会使计算更容易,因为您可以使用 count(state.todos.visible) 而不是state.visibilityFilter(state.todos)(state)。 这也可以提高应用程序的可维护性。

  1. 将数据从组件中移除

组件是 React 应用程序中的分离,他们的主要职责是呈现数据并处理外部世界的视图事件和更改。 它们不能和 Redux 集成完美,一个常见的错误是将不必要的逻辑添加到组件中。 在 ActionTypes 中使用提示来更精细地控制此操作。

  1. 缓存重要的计算

计算非常重要的数据,它尽可能地减少渲染次数。 如果数据可以通过组件 props 传递(而不是组件 state),我们可以使用可应用程序级别的缓存来提高效率。

  1. 使用 Reselect 库来防止重复计算

Reselect 是一个独立的库,用于选择、缓存和组合 Redux 状态中的片段。 Reselect 使您可以从最简单的逻辑重复计算中,获得优化的效果。

下面是一个例子:

import { createSelector } from 'reselect'

const getVisibilityFilter = state => state.visibilityFilter const getTodos = state => state.todos

export const getVisibleTodos = createSelector( [getVisibilityFilter, getTodos], (visibilityFilter, todos) => { switch (visibilityFilter) { case 'SHOW_COMPLETED': return todos.filter(todo => todo.completed) case 'SHOW_ACTIVE': return todos.filter(todo => !todo.completed) default: return todos } } )

在上面的代码中,我们使用 createSelector 函数来计算 getVisibleTodos。 唯一必需的参数是一个元素数组,它代表目标选择器的输入。 在上面的示例中,收集 getVisibilityFilter 的返回值和 getTodos 的返回值,然后进行评估。 如果其中一个选择器提供的结果在以后调用不改变,结果将直接从缓存中读取。 如果您需要进一步优化性能,Reselect 还允许您使用多个缓存。

  1. 避免多个 Redux Store

使用单个存储进行操作是非常好的实践,最好的方法是保持一个整洁、干净的店面,尽可能地避免使用多个模块的状态嵌套和层状结构。

-- ---
------ - ----------- - ---- --------

----- ------ - ----------------------
----- ------ - ----------------------
----------------- ----- --------
----------------- ----- --------

-- ----
------ - ------------ --------------- - ---- --------

----- ------- - -------------------------- -----------
----- ----- - ---------------------
---------------- ----- --------
---------------- ----- --------

结论

在本文中,我们介绍了一些有关优化 Redux 应用程序的最佳实践和一些最流行的调试工具。 无论是用于大型还是小型应用程序,这些技巧都可以帮助您提高应用程序的性能和可维护性。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/670f1e6d5f5512810262fd37


猜你喜欢

  • 如何使用 AspNetCore MVC 构建 RESTful API 并进行单元测试

    在前端开发中,RESTful API 是一个非常重要的概念。在实现 Web 应用程序的同时,还需要构建 API,以便其他开发人员可以使用它们来获取应用程序的数据。使用 AspNetCore MVC,您...

    4 天前
  • Babel 编译 ES6 时出现”TypeError: Cannot read property 'bindings' of null“错误该如何解决?

    在进行 ES6 开发时经常需要使用 Babel 编译器将 ES6 代码转换为 ES5,以便让最新的 JavaScript 语言特性可以得到到广泛的支持。但是,有时候在使用 Babel 编译时会遇到一个...

    4 天前
  • 解决自定义元素在滚动时闪烁的问题

    在前端开发中,我们经常会用到自定义元素,尤其是在构建可重用的组件时。然而,当我们在滚动页面时,自定义元素可能会出现闪烁的问题,这会影响用户的体验并降低页面的质量。 本文将介绍该问题的原因,并提供解决方...

    4 天前
  • 使用 ESLint 和 Vue.js 开发应用程序

    Vue.js 是一个流行的前端框架,可以让开发者更容易地构建复杂的单页应用程序。 但是,编写大型应用程序往往变得困难。代码结构变得混乱,面对大量重复代码以及处理这些代码中的错误和警告变得非常麻烦。

    4 天前
  • 在 Kubernetes 中使用自动伸缩组 (ASG) 来管理节点的自动缩放

    前言 在 Kubernetes 集群中,节点的数量直接关系到集群的负载能力和可靠性,如果节点数量过多或过少,都会导致资源的浪费或者集群的不稳定。而自动伸缩组(ASG)则可以帮助我们根据实际的负载情况来...

    4 天前
  • ECMAScript 2019 及其新特性汇总

    ECMAScript 2019 及其新特性汇总 ECMAScript 是一个国际标准组织,该组织发布了 JavaScript 的标准。每年,ECMAScript 都会发布一个新版本来支持新的特性。

    4 天前
  • Enzyme:React 单元测试的高效方式

    对于前端工程师而言,单元测试是保证代码质量和可靠性的关键步骤之一。而对于使用 React 开发的应用而言,单元测试却往往需要借助于额外的工具本质实现。Enzyme 就是其中一种功能强大的测试工具,它可...

    4 天前
  • 响应式设计中处理数据重叠的方法

    随着移动设备的普及,响应式设计已成为现代网页设计的重要组成部分。然而,在移动设备上,有时候会出现一种情况:当数据量较大时,数据会在页面上重叠,影响用户体验。本文将介绍在响应式设计中,处理数据重叠的方法...

    4 天前
  • 深入浅出 Hapi.js 路由:理解 Server、Route 和 Handler

    在前端开发中,Web 服务器框架是一种非常重要的工具。Hapi.js 作为一款现代化的 Web 服务器框架,有着非常广泛的应用,尤其是在 Node.js 生态系统中。

    4 天前
  • ECMAScript 2018:异步迭代器与可让人提前退出的迭代器

    ECMAScript 2018(ES2018)是 JavaScript 的最新版本,其中包含了很多新的语言特性和增强功能,其中特别引人注目的是异步迭代器和可让人提前退出的迭代器。

    4 天前
  • Deno 中如何解决模块循环引用问题?

    背景 Deno 是一个新型的 JavaScript / TypeScript 运行时环境,它的设计目标是安全、现代、可靠。Deno 的模块加载方式和 Node.js 有所不同,既没有 CommonJS...

    4 天前
  • React Native 组件性能优化的几种方法

    React Native 作为一种跨平台的移动应用开发框架,越来越受到开发者们的关注。然而,如何在 React Native 中提高组件的性能是一个值得注意的问题。

    4 天前
  • 自定义元素中使用 ECharts 进行数据可视化

    在现代化的 Web 应用程序中,数据可视化已成为一种不可或缺的工具。ECharts 是一个基于 JavaScript 的开源数据可视化库,提供了直观、交互式、高性能的图表和可视化组件,可用于创建各种类...

    4 天前
  • 使用 Web Components 实现跨端复用和可维护性

    Web Components 是一种新兴的 Web 技术,它允许开发者定义自定义元素及其行为,可以实现跨浏览器和跨平台的复用,同时也可以提高代码的可维护性和扩展性。

    4 天前
  • Tailwind CSS 输入框 focus 时如何修改边框颜色?

    Tailwind CSS 是一款流行的 CSS 框架,它具有丰富的类集合和易于使用的 API,可以快速地构建漂亮和响应式的用户界面。 在 Tailwind CSS 中,我们可以方便地修改输入框的大小、...

    4 天前
  • 如何在 Hapi.js 应用中使用 Mongoose

    概述 在现代网站和应用程序的构建中,使用数据库是非常有用的。MongoDB 是一个广泛使用的非关系型数据库,而 Mongoose 是一个开源的 JavaScript 库,可以方便地连接、访问和管理 M...

    4 天前
  • AngularJS 中的 $httpBackend 模拟后端请求

    什么是 $httpBackend? 在 AngularJS 中,$httpBackend 是一个内置的服务,它可以模拟后端请求,包括 GET、POST、DELETE、PUT 等请求方式。

    4 天前
  • Vue.js 中的组件通信方式总结

    Vue.js 是一个流行的 JavaScript 前端框架,其组件化开发方式在前端开发中被广泛应用。在 Vue.js 中,组件是基本构建块,它们相互协同工作才能实现复杂的网页和应用程序。

    4 天前
  • 在 Deno 中使用 WebSocket 进行实时位置共享的完整教程

    在 Deno 中使用 WebSocket 进行实时位置共享的完整教程 引言 WebSocket 是一种协议,用于在客户端和服务器之间建立实时的双向通信。在此教程中,我们将学习如何使用 Deno 和 W...

    4 天前
  • SSE 如何支持文本传输、JSON、XML 等多种数据格式?

    什么是 SSE? SSE(Server-Sent Events)是一种 HTML5 技术,可以将服务器端数据实时推送到客户端浏览器,而不需要客户端进行轮询。这种技术可以使得 Web 应用程序在不刷新页...

    4 天前

相关推荐

    暂无文章