当前位置: 首页 > wzjs >正文

成都网站建设116web网站seo优化排名

成都网站建设116web,网站seo优化排名,商业网站是什么,四川确诊感染最新消息14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…

14.4 react-redux第三方库

提供connect、thunk之类的函数


以获取一个banner数据为例子

store

我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数

import { configureStore } from '@reduxjs/toolkit';//Redux Toolkit 推荐的创建 store 的方法,自动集成了开发工具和中间件。
import rootReducer from './reducer/reducer.js'//项目中所有 reducer 的集合
//configureStore 已经自动集成了 redux-thunk
const store = configureStore({ reducer: rootReducer });
export default store;

action

import { CHANGE_BANNERS } from './constant.js'   // 导入 action 类型常量
import axios from 'axios'                        // 导入 axios 用于发起 HTTP 请求// 普通 action creator,返回一个 action 对象
export const changeBannersAction = (data) => ({type: CHANGE_BANNERS,      // action 类型payload: data              // 传递的数据
});

**reducer:**我们是先写了一个总的reducer,合并多个 reducer,生成根 reducer 并导出,用于 Redux 的全局状态管理。

import { combineReducers } from 'redux';
import bannerReducer from './bannerReducer';const rootReducer = combineReducers({banner : bannerReducer
});export default rootReducer;

分reducer:bannerReducer

import { CHANGE_BANNERS } from "../constant"
// 初始化状态
const initailState = {banner : []
}
// 据不同的 action 类型决定如何更新 state。
const bannerReducer = (state = initailState , action) => {switch(action.type){default:return state;}}export default bannerReducer;

constant:

定义一些常量

引入store:

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import store from './store';
// 引用provider将store进行传递
import { Provider } from 'react-redux';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Provider store={store}><App /></Provider>
);

为什么要使用中间件???因为reducer必须是纯函数,这意味着它不能直接处理异步操作,异步操作必须在action之后的中间件处理之后生成原始的action,这样,reducer函数就能处理相应的action,从而改变state,更新UI。

thunk有什么缺点:

  • Redux Thunk 在处理异步操作时,通常需要编写大量的样板代码。
  • Redux Thunk 将异步逻辑与 Redux 的 action 紧密耦合在一起。这意味着 action creator 不仅需要定义 action 类型,还需要处理异步逻辑。

saga:

引入:创建中间件,应用中间件,run中间件

import { configureStore } from '@reduxjs/toolkit';
import createSagaMiddleware from 'redux-saga';
import mySaga from './saga';
import rootReducer from './reducer';
// 创建saga中间件
const sagaMiddleware = createSagaMiddleware();
// 定义store:reducer+中间件
const store = configureStore({reducer: rootReducer,middleware: (getDefaultMiddleware) =>getDefaultMiddleware().concat(sagaMiddleware)
});
// 使用中间件
sagaMiddleware.run(mySaga);export default store;

saga.js中监听actionTyp然后执行逻辑代码

import {put, takeEvery} from 'redux-saga/effects'
import axios from 'axios'
import { FETCH_HOME_MULTIDATA } from './constant';
import { changeBannersAction } from './actionCreator';
// 定义异步函数:*
function* fetchHomeMultidata(){const res =  yield axios.get('http://123.207.32.32:8000/home/multidata')const  banner = res.data.data.banner.list;
//    发送yield put(changeBannersAction(banner))
}
// 监听
function* mySaga(){yield takeEvery( FETCH_HOME_MULTIDATA, fetchHomeMultidata )
}export default mySaga;

redux-thunk
const store = configureStore({ reducer: rootReducer });
export default store;


**action**:

import { CHANGE_BANNERS } from ‘./constant.js’ // 导入 action 类型常量
import axios from ‘axios’ // 导入 axios 用于发起 HTTP 请求

// 普通 action creator,返回一个 action 对象
export const changeBannersAction = (data) => ({
type: CHANGE_BANNERS, // action 类型
payload: data // 传递的数据
});


**reducer:**我们是先写了一个总的reducer,合并多个 reducer,生成根 reducer 并导出,用于 Redux 的全局状态管理。

import { combineReducers } from ‘redux’;
import bannerReducer from ‘./bannerReducer’;

const rootReducer = combineReducers({
banner : bannerReducer
});

export default rootReducer;


分reducer:**bannerReducer**:

import { CHANGE_BANNERS } from “…/constant”
// 初始化状态
const initailState = {
banner : []
}
// 据不同的 action 类型决定如何更新 state。
const bannerReducer = (state = initailState , action) => {
switch(action.type){
default:
return state;
}

}

export default bannerReducer;


constant:定义一些常量**引入store:**

import React from ‘react’;
import ReactDOM from ‘react-dom/client’;
import App from ‘./App’;
import store from ‘./store’;
// 引用provider将store进行传递
import { Provider } from ‘react-redux’;
const root = ReactDOM.createRoot(document.getElementById(‘root’));
root.render(



);


为什么要使用中间件???因为reducer必须是纯函数,这意味着它不能直接处理异步操作,异步操作必须在action之后的中间件处理之后**生成原始的action,这样,reducer函数就能处理相应的action,从而改变state,更新UI。**thunk有什么缺点:- Redux Thunk 在处理异步操作时,通常需要编写大量的样板代码。
- Redux Thunk 将异步逻辑与 Redux 的 action 紧密耦合在一起。这意味着 action creator 不仅需要定义 action 类型,还需要处理异步逻辑。saga:引入:创建中间件,应用中间件,run中间件

import { configureStore } from ‘@reduxjs/toolkit’;
import createSagaMiddleware from ‘redux-saga’;
import mySaga from ‘./saga’;
import rootReducer from ‘./reducer’;
// 创建saga中间件
const sagaMiddleware = createSagaMiddleware();
// 定义store:reducer+中间件
const store = configureStore({
reducer: rootReducer,
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware().concat(sagaMiddleware)
});
// 使用中间件
sagaMiddleware.run(mySaga);

export default store;


saga.js中监听actionTyp然后执行逻辑代码

import {put, takeEvery} from ‘redux-saga/effects’
import axios from ‘axios’
import { FETCH_HOME_MULTIDATA } from ‘./constant’;
import { changeBannersAction } from ‘./actionCreator’;
// 定义异步函数:*
function* fetchHomeMultidata(){
const res = yield axios.get(‘http://123.207.32.32:8000/home/multidata’)
const banner = res.data.data.banner.list;
// 发送
yield put(changeBannersAction(banner))
}
// 监听
function* mySaga(){
yield takeEvery( FETCH_HOME_MULTIDATA, fetchHomeMultidata )
}

export default mySaga;

http://www.dtcms.com/wzjs/197538.html

相关文章:

  • 网站上传视频怎么做百度上如何发广告
  • 无锡自助建站网站免费建站网站大全
  • 政府网站设计的不足武汉seo群
  • 上海公司网站建设哪家好免费网站搭建平台
  • 骨骼型的网站手游免费0加盟代理
  • 怎么做网站的地图页seo优化服务公司
  • 杭州做网站哪家好百度seo优化系统
  • 长沙网页设计培训价格单页面seo搜索引擎优化
  • 杭州做宠物网站的公司哪家好杭州网站seo外包
  • wordpress又拍云cdn伪静态西安网站seo价格
  • 网站制作导航栏怎么做微信指数
  • 网站怎么做充值提现功能电话营销技巧和营销方法
  • 中山网站建设中山百度指数快刷软件
  • 网站标题的关键字怎么写查收录
  • 网站的关键词库怎么做短视频seo优化排名
  • 彩票做网站犯法吗国内seo排名分析主要针对百度
  • 深圳网站建设 乐云践新开网店3个月来亏了10万
  • 江门网站建设junke100四川seo排名
  • 怎么找上海网站建设南京网站设计优化公司
  • 企业如何创建品牌网站seo报告
  • 专业电子科技网站建设宁波网站推广
  • 网站建设做什么会计科目宁波seo公司推荐
  • 学校网站建设板块分析百度明星人气排行榜
  • 免费发布活动的平台湖北搜索引擎优化
  • 制作网页版权怎么修改长沙 建站优化
  • wordpress播放网盘视频营销排名seo
  • 登封建设局网站google图片搜索引擎入口
  • 个人可以做医疗信息网站吗超链接友情外链查询
  • 超碰网站正在建设中优化搜索引擎营销
  • 小男孩做爰网站网络推广一个月的收入