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

赣州百姓网北京网站优化合作

赣州百姓网,北京网站优化合作,黄石有没有做网站的,安全管理平台简单使用 1、下载 npm i reduxjs/toolkit react-redux 2、创建 1、在redux/user.js中创建模块user。从reduxjs/toolkit中引入createSlice创建模块片段,我们需要传入name、初始数据initialState、改state的reducers等。最后需要导出reducer和action。 代码如下&a…

简单使用

1、下载

npm i @reduxjs/toolkit react-redux

2、创建

    1、在redux/user.js中创建模块user。从@reduxjs/toolkit中引入createSlice创建模块片段,我们需要传入name、初始数据initialState、改state的reducers等。最后需要导出reducer和action。

代码如下:

import { createSlice } from '@reduxjs/toolkit'const userSlice = createSlice({name: 'user', //action.type和reducer的名字,表现在控制台的调试器上,一般与模块同名//初始数据initialState: {age: 18},reducers: {// reducers中存放用于修改state的方法changeAge(state, action) {state.age = action.payload //传过来的数据存放在action.payload上}}
})export const { changeAge } = userSlice.actions //需要把action导出,dispatch需要
export default userSlice.reducer //导出reducer,用于创建Store

        2、在redux/index.js中,引入configureStore用于创建Store,还需要引入user模块的reducer完成创建。代码如下:

import { configureStore } from '@reduxjs/toolkit'
import userReducer from './user'const Store = configureStore({reducer: {user: userReducer //模块名:reducer}
})export default Store

3、在index.js中与之前一样,引入Provider,传入Store。

import React from 'react'
import ReactDOM from 'react-dom/client'import App from './App'
import Store from './redux'
import { Provider } from 'react-redux'
const root = ReactDOM.createRoot(document.getElementById('root'))
root.render(// 将store传入context,这样任何组件都能访问Store,而不需要在组件中手动引入Store<Provider store={Store}><App /></Provider>
)

3、使用

在jsx文件中,dispatch的是前面user模块文件导出的action。代码如下:

import React from 'react'
import { changeAge } from './redux/user'
import { useDispatch, useSelector } from 'react-redux'
export function About() {const dispatch = useDispatch()const age = useSelector((state) => state.user.age)function addAge() {dispatch(changeAge(age + 1))}return (<div>年龄{age}<button onClick={addAge}>增加+</button></div>)
}
export default About

异步操作:createAsyncThunk

简单方式

        在redux/uset.js文件中,定义一个action方法用于修改state。在导出这个方法的后面,引入createAsyncThunk创建thunk方法。在这个方法的回调中会接收store,我们可以在请求到数据之后触发dispatch完成state的修改,具体代码如下:

import { createAsyncThunk, createSlice } from '@reduxjs/toolkit'const userSlice = createSlice({name: 'user', //action.type和reducer的名字,表现在控制台的调试器上,一般与模块同名//初始数据initialState: {data: []},reducers: {setData(state, { payload }) {state.data = payload}}
})export const { setData } = userSlice.actions //需要把action导出,dispatch需要
// 在导出action的下方定义thunk方法
export const getDataThunk = createAsyncThunk('user/getData', async (id, store) => {let res = await fetch(`http://localhost:3000/data.txt?id=${id}`)res = await res.json()store.dispatch(setData(res))
})
export default userSlice.reducer //导出reducer,用于创建Store

        使用就是正常的dispatch这个thunk

    import { getDataThunk} from './redux/user'await dispatch(getDataThunk())	//因为返回promise,我们可以await,这样就是同步的啦

其他方式

        另外的方法是先定义好thunk方法,然后在slice配置对象中使用extraReducers函数,函数接收builder,利用builder.addCase添加回调,完成对state的修改。

        代码如下:【但是我觉得上面的写法更简单】

// 利用createAsyncThunk创建异步action,第一个参数是 'action名' ,第二个参数是回调用于请求接口,用promise返回数据
export const fetchUser = createAsyncThunk('fetchUser', async (userId) => {let res = await fetch('http://123.207.32.32:8000/home/multidata')res = await res.json()return res
})
{name:'user',initialState:{//...},reducer:{//...},extraReducers: (builder) => {builder// .addCase(fetchUser.pending, (state) => {//   state.loading = true;// }).addCase(fetchUser.fulfilled, (state, action) => {state.list = action.payload})// .addCase(fetchUser.rejected, (state, action) => {//   state.loading = false;//   state.error = action.payload;// });},// 下面的写法有警告
/*   extraReducers: {[fetchUser.pending](state, action) {// state.list = action.payload// 做一些加载转圈的操作console.log('pending');},[fetchUser.fulfilled](state, action) {state.list = action.payload},[fetchUser.rejected](state, action) {// state.list = action.payloadconsole.log('rejected');}} */
}

END

redux有关的知识暂时总结完毕。

http://www.yidumall.com/news/54712.html

相关文章:

  • 棕色网站设计平台运营
  • 公务员 副业 做网站网站首页排名seo搜索优化
  • 贵州建设厅监理协会网站郑州seo网络推广
  • 创建了一个网站 怎样做系统测试作品推广
  • 天津市做网站的公司网站注册页面
  • 怎样做淘宝推广网站seo关键词排行优化教程
  • 长春建站宣传百度关键词热度排名
  • 常州微信网站建设案例短视频精准获客系统
  • 深圳的网站建设公司的外文名是怎么制作网站教程步骤
  • html网站建设代码产品营销推广的方案
  • 导师让做网站营销型网站建设费用
  • 重庆永川网站建设公司怎么推广网络营销
  • 一品威客做的网站好用吗百度热搜广告位
  • 如何查询一个网站的注册信息营销软件站
  • 360网站弹窗推广怎么做的一站传媒seo优化
  • 德化规划与建设局网站网络推广费用高吗
  • 在百度上免费做网站页面北京seo公司公司
  • 西安网站搭建建设定制如何在百度发布信息推广
  • 兴化市政府门户网站城乡建设长春百度seo公司
  • 福州商城网站建设宁波做网站的公司
  • 自己建设的网站靠谱吗优化大师tv版
  • 做交互网站seo的主要分析工具
  • 哪些网站需要备案qq代刷网站推广
  • wordpress主页美化福建seo
  • 政府门户网站建设的实施方案游戏推广公司怎么接游戏的
  • 实例网站制作教程做网站的费用
  • 网站如何更换图片com域名注册
  • 点餐网站怎么做2024年3月新冠高峰
  • 网站论坛推广文案怎么做百度一下首页网页手机版
  • 网站客服管理系统提高网站权重的方法