React-Redux-DevTools和React-Redux优化

简介: React-Redux-DevTools和React-Redux优化

Redux DevTools 概述


  • Redux DevTools 是一款 Redux 官方提供的浏览器调试工具
  • 可以让我们很方便的对 Redux 保存的状态进行追踪调试

GitHub 地址:https://github.com/reduxjs/redux-devtools



使用 Redux DevTools


  • 在浏览器中安装 Redux DevTools

需要添加如下配置项,即可完成 Redux DevTools 的配置,然后就可以进行监控我们所派发的任务和状态的变更过程。

import {compose} from 'redux'
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({trace: true}) || compose;
const store = createStore(reducer, composeEnhancers(storeEnhancer));


添加如上三行代码即可完成,效果如下:




Redux优化


当前 reducer 存在的问题:

所有的操作都是在一个 reducer 中处理的, 如果项目很复杂, 那么会变得非常难以维护

如何解决:

对 reducer 进行拆分

官方文档地址:https://www.redux.org.cn/docs/recipes/StructuringReducers.html

那么接下来就开始第一步的优化就是,拆分 reducer,目前我们的示例项目当中有两个组件分别是 Home 与 About,那么我们这里就将不同组件的 Reducer 进行拆分,更改 reducer.js:


Home:

// Home
let initialHomeState = {
    count: 1
};
function homeReducer(homeState = initialHomeState, action) {
    switch (action.type) {
        case ADD_COUNT:
            return {...homeState, count: homeState.count + action.num};
        case SUB_COUNT:
            return {...homeState, count: homeState.count - action.num};
        default:
            return homeState;
    }
}

About:

// About
let initialAboutState = {
    info: {}
};
function aboutReducer(aboutState = initialAboutState, action) {
    switch (action.type) {
        case CHANGE_INFO:
            return {...aboutState, info: action.info};
        default:
            return aboutState;
    }
}


统一封装成一个 reducer 进行导出使用:

function reducer(state = {}, action) {
    return {
        countData: homeReducer(state.countData, action),
        infoData: aboutReducer(state.infoData, action)
    }
}


更改一下 About 与 Home 组件的使用:

Home.js:

const mapStateToProps = (state) => {
    return {
        count: state.countData.count
    }
};


About.js:

const mapStateToProps = (state) => {
    return {
        info: state.infoData.info,
    }
};


如上就是第一个可优化的点,如果项目庞大了就可以很好的方便我们进行维护和管理,接下来还有其它问题需要解决,在解决之前首先我们来看一个东西就是 为什么 Redux 中的处理函数叫做 reducer


  • 因为在数组中也有一个叫做 reducer 函数, 这个函数的特点是: 会将上一次的返回结果作为下一次的参数
  • 同理在 Redux 中这个处理函数也会将上一次的返回结果作为下一次的参数, 所以就叫做 reducer

关于如上合并拆分之后的 reducer 的方式其实有其它的方式,分别如下:

  • 手动合并 (2B)
  • 通过 Redux 提供的合并函数来合并

通过 Redux 提供的合并函数来合并编写步骤如下首先导入合并函数:

import {combineReducers} from 'redux';


使用合并函数:

const reducer = combineReducers({
    countData: homeReducer,
    infoData: aboutReducer
});


当前 Redux 还存在的其它问题,就是我们的 action 与 constants、reducer 都写在一个文件当中这样下来,如果项目做得比较久了内容会非常的多,那么对于我们后期的迭代就很不方便,所以需要在将这个点进行优化一下,在 store 文件夹当中创建 Home 与 About 文件夹,然后在这两个文件夹当中分别创建对应的 action.js、constants.js、reducer.js,在这三个文件中编写对应组件的任务,与对应的处理逻辑。

Home:

// action.js
import {
    ADD_COUNT,
    SUB_COUNT,
} from './constants';
// 利用action来修改状态
export const addAction = (num) => {
    return {type: ADD_COUNT, num: num};
};
export const subAction = (num) => {
    return {type: SUB_COUNT, num: num};
};
// constants.js
export const ADD_COUNT = 'ADD_COUNT';
export const SUB_COUNT = 'SUB_COUNT';
// reducer.js
import {
    ADD_COUNT,
    SUB_COUNT,
} from './constants';
let initialHomeState = {
    count: 0
};
function homeReducer(homeState = initialHomeState, action) {
    switch (action.type) {
        case ADD_COUNT:
            return {...homeState, count: homeState.count + action.num};
        case SUB_COUNT:
            return {...homeState, count: homeState.count - action.num};
        default:
            return homeState;
    }
}
export default homeReducer;


About:

// action.js
import {
    CHANGE_INFO,
    GET_USER_INFO
} from './constants';
export const changeAction = (info) => {
    return {type: CHANGE_INFO, info: info};
};
export const getUserInfo = () => {
    return {type: GET_USER_INFO}
}
// constants.js
export const CHANGE_INFO = 'CHANGE_INFO';
export const GET_USER_INFO = 'GET_USER_INFO';
// reducer.js
import {
    CHANGE_INFO
} from './constants';
let initialAboutState = {
    info: {}
};
function aboutReducer(aboutState = initialAboutState, action) {
    switch (action.type) {
        case CHANGE_INFO:
            return {...aboutState, info: action.info};
        default:
            return aboutState;
    }
}
export default aboutReducer;


然后最终我们的 Redux 的目录结构可以演变成如下所示的样子:

reducer.js

import homeReducer from './Home/reducer';
import aboutReducer from './About/reducer';
import {combineReducers} from 'redux';
const reducer = combineReducers({
    countData: homeReducer,
    infoData: aboutReducer
});
export default reducer;

到此 Redux 的优化内容大致就这些了,End



最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
7月前
|
前端开发 JavaScript UED
使用React Hooks优化前端应用性能
本文将深入探讨如何使用React Hooks来优化前端应用的性能,重点介绍Hooks在状态管理、副作用处理和组件逻辑复用方面的应用。通过本文的指导,读者将了解到如何利用React Hooks提升前端应用的响应速度和用户体验。
|
27天前
|
存储 缓存 JavaScript
如何优化React或Vue应用的性能
需要注意的是,性能优化是一个持续的过程,需要根据具体的应用场景和性能问题进行针对性的优化。同时,不同的项目和团队可能有不同的优化重点和方法,要结合实际情况灵活运用这些优化策略,以达到最佳的性能效果。
107 51
|
11天前
|
前端开发 UED 开发者
React 选项卡组件 Tabs:从基础到优化
本文详细介绍了如何在React中构建一个功能丰富的选项卡组件,包括基础实现、样式美化、常见问题及解决方法。通过逐步讲解,从简单的选项卡组件结构开始,逐步引入样式、性能优化、动态内容加载、键盘导航支持和动画效果,最后讨论了自定义样式的实现。旨在帮助开发者在React项目中高效构建高质量的选项卡组件。
47 18
|
16天前
|
前端开发 UED
React 文本区域组件 Textarea:深入解析与优化
本文介绍了 React 中 Textarea 组件的基础用法、常见问题及优化方法,包括状态绑定、初始值设置、样式自定义、性能优化和跨浏览器兼容性处理,并提供了代码案例。
42 8
|
1月前
|
前端开发 JavaScript API
探究 React Hooks:如何利用全新 API 优化组件逻辑复用与状态管理
本文深入探讨React Hooks的使用方法,通过全新API优化组件逻辑复用和状态管理,提升开发效率和代码可维护性。
|
2月前
|
前端开发 JavaScript 算法
React 渲染优化策略
【10月更文挑战第6天】React 是一个高效的 JavaScript 库,用于构建用户界面。本文从基础概念出发,深入探讨了 React 渲染优化的常见问题及解决方法,包括不必要的渲染、大量子组件的渲染、高频事件处理和大量列表渲染等问题,并提供了代码示例,帮助开发者提升应用性能。
59 6
|
2月前
|
JSON 前端开发 JavaScript
【简单粗暴】如何使用 React 优化 AG 网格性能
【简单粗暴】如何使用 React 优化 AG 网格性能
35 3
|
7月前
|
监控 前端开发 API
如何优化React性能?
【4月更文挑战第9天】提升React应用性能的关键策略包括:使用React.memo和PureComponent防止不必要的重渲染;实施代码分割减少初始加载时间;借助React Profiler定位性能问题;优化state和props以减小大小和复杂性;设置列表项的key属性;避免内联函数和对象;自定义shouldComponentUpdate或React.memo比较函数;使用虚拟化技术渲染大量列表;通过Context API共享数据;以及利用服务端渲染加速首屏加载。不断监控和调整是优化的核心。
66 9
|
4月前
|
前端开发 JavaScript 大数据
React与Web Workers:开启前端多线程时代的钥匙——深入探索计算密集型任务的优化策略与最佳实践
【8月更文挑战第31天】随着Web应用复杂性的提升,单线程JavaScript已难以胜任高计算量任务。Web Workers通过多线程编程解决了这一问题,使耗时任务独立运行而不阻塞主线程。结合React的组件化与虚拟DOM优势,可将大数据处理等任务交由Web Workers完成,确保UI流畅。最佳实践包括定义清晰接口、加强错误处理及合理评估任务特性。这一结合不仅提升了用户体验,更为前端开发带来多线程时代的全新可能。
103 1
|
4月前
|
前端开发 UED 开发者
React组件优化全攻略:深度解析让你的前端应用飞速运行的秘诀——从PureComponent到React.memo的彻底性能比较
【8月更文挑战第31天】在构建现代Web应用时,性能是提升用户体验的关键因素。React作为主流前端库,其组件优化尤为重要。本文深入探讨了React组件优化策略,包括使用`PureComponent`、`React.memo`及避免不必要的渲染等方法,帮助开发者显著提升应用性能。通过实践案例对比优化前后效果,不仅提高了页面渲染速度,还增强了用户体验。优化React组件是每个开发者必须关注的重点。
81 0