第57节——切片

一、什么是切片

在 Redux 中,一个 state tree 是由多个 reducer 组成的,每个 reducer 负责管理一个 state 的一部分,这个概念称为“切片”(slice)。

例如,一个电子商务应用程序可能有一个购物车的 state,一个用户信息的 state,以及一个商品列表的 state。每个 state 都可以由一个 reducer 管理,这些 reducer 可以通过 combineReducers 函数组合在一起,形成一个完整的 state tree。其中,每个 reducer 管理的部分 state 就是一个切片。

使用切片的好处在于,每个 reducer 只需要关心自己管理的部分 state,而不需要关心整个 state tree 的结构。这样可以使 reducer 的代码更加清晰和易于维护。此外,切片还可以让我们更加方便地组织 action creators 和 selectors,从而使代码结构更加清晰

二、什么是createSlice

createSlice是Redux Toolkit中提供的一个用于快速创建Redux reducer的函数。它基于Redux reducer的标准结构,使得创建和更新Redux state更加方便、简洁。使用createSlice函数创建的slice包含了一个Redux reducer、一组action creators和对应的action types。

三、createSlice解决了什么问题

createSlice 解决了传统 Redux 应用中需要手动编写 reducer 和 action creators 的问题,简化了 Redux 应用程序的开发流程,提高了代码的可读性和可维护性。

在传统的 Redux 应用程序中,我们需要手动编写 reducer 函数来处理每个 action type,然后将它们组合成一个大的 rootReducer 函数。这样的代码结构往往比较冗长和繁琐,同时也容易出错。而 createSlice 的出现,让我们可以通过提供一个包含 reducer 和 action creators 的对象来自动生成相应的 reducer 函数和 action creators,从而避免了手动编写 reducer 的过程,使得开发者更加专注于业务逻辑的实现。

四、createSlice的优点

1、约定优于配置

createSlice 使用一些约定俗成的规则来生成 reducer 和 action creators,例如使用 Immer 库来进行 immutable state 的更新,这样可以避免在编写 reducer 函数时出现一些常见的错误。

2、自动生成 action type

createSlice 会自动根据 slice 的名称和 reducer 的名称生成相应的 action type,这样就避免了手动编写 action type 的过程,使得代码更加规范化和易于维护。

3、简化异步操

createSlice 提供了一个 createAsyncThunk 函数,用于简化异步操作的编写流程,让开发者更加专注于业务逻辑的实现

五、参数介绍

import { createSlice } from '@reduxjs/toolkit'

/**
 * createSlice 返回当前切片模块
 * 一个对象
 */
const useSlice = createSlice({
  // 切片名
  name: 'sliceName',
  // 初始状态
  initialState: {

  },
  /**
   * reducer模块
   * 这里并不能进行异步操作
   */
  reducers: {
    // 里面直接跟方法
    reducerName(state, action) {
      // handle the action
      return state
    }
  },
  /**
   * 用于处理其他的 action type。
   * 这些 reducer 函数也接收一个名为 state 的参数和一个名为 action 的参数。
   * 注意,这些 reducer 函数默认没有使用 Immer 库进行 immutable state 的更新
     
   */
  extraReducers: {
    // handle extra reducers
  }
})

//  导出相关的方法,页面可以直接调用
export const { reducerName } = sliceName.actions
// 当前的的状态
export default sliceName.reducer

extraReducers

这里我们单独介绍一下extraReducers。当我们使用createSlice创建Redux的Slice时,extraReducers可以用于添加额外的reducer。这些额外的reducer可以处理来自其他Slice的action或其他非标准的action类型

1、在actions模块中定义一个action
export const updateName = (name) => {
  return {
    type: 'updateName',
    name
  }
}
2、在切片中引入
import { createSlice } from "@reduxjs/toolkit";

/**
 * createSlice 返回当前切片模块
 * 一个对象
 */
const userSlice = createSlice({
  // 切片名
  name: "user",
  // 初始状态
  initialState: {
    age: 1,
    status: "",
    name: '张三'
  },
  extraReducers: (builder) => {
    builder
      .addCase('updateName', (state, action) => {
        console.log(state, action, '当前的动作')
        state.name = '王五'
      })
  },
});

// 当前的的状态
export default userSlice.reducer;

六、简单例子实现age++

1、创建user模块

import { createSlice } from '@reduxjs/toolkit'

/**
 * createSlice 返回当前切片模块
 * 一个对象
 */
const userSlice = createSlice({
  // 切片名
  name: 'user',
  // 初始状态
  initialState: {
    age: 1
  },
  /**
   * reducer模块
   * 这里并不能进行异步操作
   */
  reducers: {
    // 里面直接跟方法
    addNum(state, action) {
      return {...state, age: state.age + 1}
    }
  },
})

//  导出相关的方法,页面可以直接调用
export const { addNum } = userSlice.actions
// 当前的的状态
export default userSlice.reducer

2、页面中调用

import React from "react";
import { useSelector, useDispatch } from "react-redux";
// import { increment, decrement } from "./store";

import { addNum } from "./slice/user";

function App() {
  const user = useSelector((state) => state.user);

  const dispatch = useDispatch();

  return (
    <div>
      {user.age}
      <button onClick={() => dispatch(addNum())}>age + 1</button>
    </div>
  );
}

export default App;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 故障特征提取是指从机器或设备的信号中提取出故障相关的信息,以实现故障的诊断和预警。基于频率切片小波变换(fswt)的方法则是一种常用的故障特征提取方法。 在fswt中,首先将信号分成若干个频率切片,然后对每个频率切片进行小波变换,得到小波系数。通过比较不同切片之间的小波系数,可以发现由于故障引起的信号变化。这些变化的特点包括振动模式、振幅谱和相位谱。 振动模式是指故障信号包含的振动类型,比如旋转、横向、纵向等。振幅谱则是指故障信号不同频率分量的振幅大小,通过比较不同时间或频率的振幅谱变化,可以发现故障信号的不同特征。相位谱则是指故障信号不同频率分量的相位关系,与振动模式相关。 fswt方法可以在不需要提前了解信号特征的情况下,发现故障信号的特征,具有普适性和全局性。同时,它也有一些不足之处,比如灵敏度不够高、信噪比不够好等。 总之,基于频率切片小波变换的故障特征提取方法,可以为诊断和预防设备故障提供可靠的支持和保障。 ### 回答2: 频率切片小波变换(FSWT)是用于故障特征提取的一种有效方法。它将小波变换与频率分析相结合,通过对信号进行分段、分层处理,提取不同频率段的信号特征,从而实现对故障信号的精确诊断。 传统的小波变换方法只能对信号进行整体分析,不能有效地分离出不同频率段的信号,因此它的故障诊断效果有限。而FSWT通过将信号分解为不同频率段的小波系数序列,再通过选择合适的分层和分段策略,将各个频率段中的故障特征提取出来,提高了信号分析的精度和准确性。 在实际应用中,FSWT可以应用于许多领域,如机械故障预测、电气故障检测等。利用FSWT方法可以提取出机械信号中的故障频率,以检测和诊断不同类型的机械故障。同样地,FSWT也可以应用于电气信号分析,提取出电气设备中的频率特征,识别设备中的故障。 总之,频率切片小波变换是一种高效、准确的故障特征提取方法。通过选择合适的分层和分段策略,可以有效地分离出不同频率段的信号特征,提高信号分析的精度和准确性,为工程应用提供了广泛的应用场景。 ### 回答3: 频率切片小波变换(Frequencies Slicing Wavelet Transform,FSWT)是一种信号分析方法。它是一种线性时频分析方法,能够将信号在时间域和频率域上同时进行分析。 该方法通过对信号进行小波变换,得到小波系数,再将小波系数按照频率进行切片,得到一系列小波系数序列,即“频率切片”。这些小波系数序列相当于是对信号在不同频带的能量分布进行了描述。 在故障诊断中,FSWT方法可以用于故障特征提取。首先,将故障信号进行FSWT变换。然后,通过观察频率切片系数图,可以发现信号中存在的故障频率成分,以及对应的能量分布情况。进一步分析这些信息,可以提取出诊断故障所需的特征。 相对于传统的小波变换方法,频率切片小波变换更能够突出信号的频域特征。因此,它在故障特征提取中具有很大的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值