Redux VS Redux 工具包 && Redux Thunk VS Redux-Saga-js教程

首页 2024-07-11 18:45:19

简介

在现代 web 特别是在开发过程中 react,有效的管理状态对于构建动态响应应用程序至关重要。状态表示可以随时间变化的数据,如用户输入、获取的数据或任何其他动态内容。如果没有适当的状态管理,应用程序可能会变得难以维护和调试,从而导致 ui 不一致和行为是不可预测的。这是状态管理工具的使用场所,帮助开发人员在其应用程序中有效地维护和操作状态。

当地州

使用 react 的 usestate 钩子在每个组件中管理本地状态。这种方法非常简单,非常适合简单的、特定的组件状态要求。

示例:

import react, { usestate } from 'react';

function counter() {
  const [count, setcount] = usestate(0);

  return (
    <div>
      <p>count: {count}</p>
      <button onclick="{()"> setcount(count   1)}&gt;increment</button>
    </div>
  );
}

用例: 本地状态非常适合小型、独立的组件,不需要由其他组件共享或访问。

上下文api

context api 允许在多个组件之间共享状态,而无需 prop 钻取使其成为更复杂状态共享需求的良好解决方案。

示例:

import react, { createcontext, usecontext, usestate } from 'react';

const themecontext = createcontext();

function themeprovider({ children }) {
  const [theme, settheme] = usestate('light');

  return (
    <themecontext.provider value="{{" theme settheme>
      {children}
    </themecontext.provider>
  );
}

function themedcomponent() {
  const { theme, settheme } = usecontext(themecontext);

  return (
    <div>
      <p>current theme: {theme}</p>
      <button onclick="{()"> settheme(theme === 'light' ? 'dark' : 'light')}&gt;toggle theme</button>
    </div>
  );
}

用例: context api 它对整体状态非常有用,例如,需要由组件树中多个组件访问的主题或用户身份验证。

redux

redux 它是一个状态管理库,提供集中存储,用于管理具有可预测状态转换的全局状态,使用减速器和操作。

示例:

// store.js
import { createstore } from 'redux';

const initialstate = { count: 0 };

function counterreducer(state = initialstate, action) {
  switch (action.type) {
    case 'increment':
      return { count: state.count   1 };
    default:
      return state;
  }
}

const store = createstore(counterreducer);

redux 工具包

redux toolkit 官方推荐使用 redux 该方法简化了样板代码的设置和减少。

示例:

// store.js
import { configurestore, createslice } from '@reduxjs/toolkit';

const counterslice = createslice({
  name: 'counter',
  initialstate: { count: 0 },
  reducers: {
    increment: state =&gt; { state.count  = 1; },
  },
});

const store = configurestore({
  reducer: {
    counter: counterslice.reducer,
  },
});

export const { increment } = counterslice.actions;
export default store;

local state、context api、redux 和 redux toolkit 之间的区别

- 本地状态及上下文 api:
局部状态仅限于单个组件,使其成为小型、独立状态需求的理想选择。另一方面,context api 允许跨多个组件共享状态,以避免 prop 钻探。

- redux 与 redux 工具包:
redux 它提供了一种具有大量模型的传统状态管理方法。 redux toolkit 使用 createslice 和 createasyncthunk 其他实用程序简化了流程,使编写干净、可维护的代码更加容易。

中间件:

redux 中间部件作为调度操作,达到减速器之间的强大扩展点。 redux thunk 和 redux saga 等中间件可以实现处理异步操作和管理副作用等高级功能。

中间件的必要性
管理中间件 redux 异步操作和副作用在应用程序中非常重要。它们有助于保持操作创建者和减速器的纯度,没有副作用,从而产生更干净、更容易维护的代码。

1. redux thunk

redux thunk 将异步调度简化,允许操作创建者返回函数而不是普通对象。

示例:

const fetchdata = () =&gt; async dispatch =&gt; {
  dispatch({ type: 'fetch_data_start' });
  try {
    const data = await fetch('/api/data').then(res =&gt; res.json());
    dispatch({ type: 'fetch_data_success', payload: data });
  } catch (error) {
    dispatch({ type: 'fetch_data_failure', error });
  }
};

用例: redux thunk 适用于简单的异步操作,如从 api 获取数据。

2. redux 传奇

redux saga 利用生成器函数管理的复杂副作用,为异步逻辑提供了更加结构化和可管理的方法。

示例:

import { call, put, takeEvery } from 'redux-saga/effects';

function* fetchDataSaga() {
  yield put({ type: 'FETCH_DATA_START' });
  try {
    const data = yield call(() =&gt; fetch('/api/data').then(res =&gt; res.json()));
    yield put({ type: 'FETCH_DATA_SUCCESS', payload: data });
  } catch (error) {
    yield put({ type: 'FETCH_DATA_FAILURE', error });
  }
}

function* watchFetchData() {
  yield takeEvery('FETCH_DATA_REQUEST', fetchDataSaga);
}

用例: redux saga 非常适合处理复杂的异步工作流程,如涉及多个步骤、重试或复杂条件逻辑的工作流程。

redux thunk 和 redux saga 之间的区别

- redux thunk:
最适合更简单、更直接的异步操作。它允许动作创建者返回函数,并且易于理解和实现。

- redux saga:
最适合更复杂和结构化的异步工作流程。它使用生成器函数来处理副作用,并提供更强大但更复杂的异步逻辑管理解决方案。

结论

有效的状态管理可扩展和可维护 react 应用程序非常重要。虽然地方状态和 context api 更简单的用例可以很好的满足,但是 redux 和 redux toolkit 为大型应用程序提供了强有力的解决方案。像 redux thunk 和 redux saga 这些状态管理工具通过处理异步操作和副作用进一步加强,每个工具都满足了应用逻辑中不同复杂性的需求。

除了这些工具,还有其他工具可以与之相匹配 react 共同使用的状态管理库包括:

recoil: 专为 react 设计的状态管理库提供细粒度控制和轻松的跨组件状态共享。它简化了状态管理,使用原子和选择器分别使用状态和衍生状态。
mobx: 注重简单性和可观察性,使其更容易处理复杂的表单和实时更新。 mobx 它提供了一个更具反应性的编程模型,可以自动跟踪状态变化并相应更新 ui。
zustand: 小型、快速、可扩展的状态管理解决方案。它使用钩子来管理状态,并提供一个简单的 api 创建存储和更新状态。
选择正确的工具取决于应用程序的具体需求和复杂性。了解每个工具的优点和用例可以在你身上 react 实现更高效、更可维护的状态管理。

以上是Redux VS Redux 工具包 && Redux Thunk VS Redux-关于Saga的详细信息,请关注其他相关文章!


p