網站首頁 編程語言 正文
在react項目中使用redux的簡單案例
腳手架 create-react-app
1.安裝redux
npm install redux --save
2.redux store目錄文件分配
?-- action.js 動作
?--reducers? 計算屬性集合文件夾
? ? ? ? -- index.js 計算模塊出口
? ? ? ? -- user.js 計算模塊1
? ? ? ? -- test.js 計算模塊2
? -- store.js? redux的store 出口
? -- type.js action 動作名稱類型
結構案例
3.? store代碼
1.action.js 動作整合模塊
import types from '../type.js';
//View視圖 要發送多少種消息,這里就封裝多少種
export const userAction=(data)=>({type:types.USER,data});
export const userTokenAction=(data)=>({type:types.TOKEN,data});
2.type.js 常量名稱類別封裝
export default {
TOKEN:'TOKEN',
USER:'USER',
USER_NAME:'USER_NAME',
}
3. reducers??計算屬性整合
????user.js 計算模塊1 (PS: 計算模塊的js 文件 分成多個?還是?寫成一個 隨自身需求,這里舉例 只寫? ? ? 一個,token.js 和 user.js 是一致的)
import { createStore,combineReducers } from 'redux';
import _type from '../type.js';
//reducer函數會接受兩個參數,分別為之前的 (狀態)state, 動作對象(action)
const initState = '初始化數值';
export default function User(state = initState ,action){
const {type,data} =action;
// console.log("觸發____");
switch(type){
case _type.USER:
//最好是新生成的數據
return {...data};
case _type.USER_NAME:
return '111';
case _type.TOKEN:
return state + '222';
default:
return state;
}
}
??index.js 計算模塊出口
import { createStore,applyMiddleware,combineReducers} from 'redux';
import User from './user';
import Token from './token';
//合并多個reducer 具體是否用 combineReducers 方法隨自己需求而定,采用combineReducers 合并時,在調用action方法時,combineReducers中的所有計算方法都會觸發,因此需要注意計算方法中判斷條件!
const allReducers=combineReducers({
user:User,
token:Token,
});
export default allReducers;
? 4.redux 導出
import { createStore,applyMiddleware,combineReducers} from 'redux';
import allReducers from './reducers/index';
export default createStore(allReducers);// 創建數據存儲倉庫
? 5.項目工程入口集成
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import serviceUrl from './service/url';
import { createStore } from 'redux';
import { Provider, connect } from 'react-redux';
import store from './redux/store';
ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>,
document.getElementById('root')
);
reportWebVitals();
4.? 在頁面中運用
import React,{component} from 'react';
import './index.scss';
import { Form, Input, Button, Checkbox,message } from 'antd';
import { Row, Col } from 'antd';
import Config from '../../utils/config';
import { HttpRequest,HttpStatus } from '../../service/http';
import Url from '../../service/url';
import md5 from 'js-md5';
import { Link } from "react-router-dom";
import {connect} from 'react-redux'
import { userTokenAction,userAction } from '../../redux/actions/action';
class Login extends React.PureComponent {
constructor(props){
super(props);
}
// 調用redux方法
onFinish = (values) => {
this.props.userToken(11111 || null);
this.props.userAction(22222 || null);
};
render() {
return <div>
展示redux store數值{ this.props?.token || '暫無數據'}
<button onClick={() => {this.onFinish}}>觸發redux方法</button>
</div>
}
}
// redux store數值暴露
const mapStateToProps=(state)=>{
return {
token:state.token,
}
};
// redux方法暴露
const mapDispatchToProps = (dispatch) => {
return {
userToken:(token)=>{
dispatch(userTokenAction(token))
},
userAction:(data)=>{
dispatch(userAction(data))
}
};
};
export default connect(mapStateToProps, mapDispatchToProps)(Login);
? ? ? ??
原文鏈接:https://blog.csdn.net/sinat_37255207/article/details/118467807
相關推薦
- 2023-03-16 redis如何取hash的值_Redis
- 2022-04-26 ASP.NET?Core中的Razor頁面實現路由功能_實用技巧
- 2022-06-21 C語言詳解無頭單向非循環鏈表各種操作方法_C 語言
- 2022-05-13 windwos11 小愛音箱鏈接上但是沒有聲音
- 2022-05-25 C語言三個函數的模擬實現詳解_C 語言
- 2022-03-15 使用Sqlyog遠程連接數據庫報錯解決方案_數據庫其它
- 2022-05-21 Deployment副本無狀態服務創建及水平擴展_服務器其它
- 2022-09-03 Golang棧結構和后綴表達式實現計算器示例_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支