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



最后

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

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

相关文章
|
5月前
|
前端开发 JavaScript UED
使用React Hooks优化前端应用性能
本文将深入探讨如何使用React Hooks来优化前端应用的性能,重点介绍Hooks在状态管理、副作用处理和组件逻辑复用方面的应用。通过本文的指导,读者将了解到如何利用React Hooks提升前端应用的响应速度和用户体验。
|
5月前
|
前端开发 JavaScript
使用 MobX 优化 React 代码
使用 MobX 优化 React 代码
65 0
|
5月前
|
监控 前端开发 API
如何优化React性能?
【4月更文挑战第9天】提升React应用性能的关键策略包括:使用React.memo和PureComponent防止不必要的重渲染;实施代码分割减少初始加载时间;借助React Profiler定位性能问题;优化state和props以减小大小和复杂性;设置列表项的key属性;避免内联函数和对象;自定义shouldComponentUpdate或React.memo比较函数;使用虚拟化技术渲染大量列表;通过Context API共享数据;以及利用服务端渲染加速首屏加载。不断监控和调整是优化的核心。
55 9
|
2月前
|
前端开发 UED 开发者
React组件优化全攻略:深度解析让你的前端应用飞速运行的秘诀——从PureComponent到React.memo的彻底性能比较
【8月更文挑战第31天】在构建现代Web应用时,性能是提升用户体验的关键因素。React作为主流前端库,其组件优化尤为重要。本文深入探讨了React组件优化策略,包括使用`PureComponent`、`React.memo`及避免不必要的渲染等方法,帮助开发者显著提升应用性能。通过实践案例对比优化前后效果,不仅提高了页面渲染速度,还增强了用户体验。优化React组件是每个开发者必须关注的重点。
47 0
|
2月前
|
前端开发 JavaScript 大数据
React与Web Workers:开启前端多线程时代的钥匙——深入探索计算密集型任务的优化策略与最佳实践
【8月更文挑战第31天】随着Web应用复杂性的提升,单线程JavaScript已难以胜任高计算量任务。Web Workers通过多线程编程解决了这一问题,使耗时任务独立运行而不阻塞主线程。结合React的组件化与虚拟DOM优势,可将大数据处理等任务交由Web Workers完成,确保UI流畅。最佳实践包括定义清晰接口、加强错误处理及合理评估任务特性。这一结合不仅提升了用户体验,更为前端开发带来多线程时代的全新可能。
28 0
|
2月前
|
前端开发 UED 开发者
React.lazy()与Suspense:实现按需加载的动态组件——深入理解代码分割、提升首屏速度和优化用户体验的关键技术
【8月更文挑战第31天】在现代Web应用中,性能优化至关重要,特别是减少首屏加载时间和提升用户交互体验。React.lazy()和Suspense组件提供了一种优雅的解决方案,允许按需加载组件,仅在需要渲染时加载相应代码块,从而加快页面展示速度。Suspense组件在组件加载期间显示备选内容,确保了平滑的加载过渡。
44 0
|
2月前
|
缓存 前端开发 JavaScript
深入探索优化React应用程序的策略
【8月更文挑战第20天】
33 0
|
4月前
|
缓存 前端开发 JavaScript
如何对 React 函数式组件进行优化
如何对 React 函数式组件进行优化
|
5月前
|
前端开发 开发者
React useMemo钩子指南:优化计算性能
React useMemo钩子指南:优化计算性能
|
5月前
|
前端开发
掌握React中的useCallback:优化性能的秘诀
掌握React中的useCallback:优化性能的秘诀