redux用法完美版,react+react-router-dom+redux

react使用4.X路由,如何写出底部导航栏 大型的网站写的移动端项目都会有底部的导航,比如,京东 学会写导航真的还是挺重要的!今天就来使用react的路由来实现下面的底部导航 我实现的效果是这样的: 说在前面: 路由安装可以参考链接:https://reacttraining.com/react-router/web/guides/quick-start 实现路由注册都可以在以上的连接中查到 一、创建一个js文... 阅读详情

1.action-types.js

//所有actions函数的`type`字符串常量
export const STORE_UPDATE = 'STORE_UPDATE';
export const STORE_ADD = 'STORE_ADD';
export const STORE_RM = 'STORE_RM';

2.actions.js

//定义`action`创建函数生成`action`对象
import * as actionTypes from './action-types.js'

export function update(data) {
    console.log(data,'data')
    return {
        type: actionTypes.STORE_UPDATE,
        data:data
    }
}

export function add(item) {
    return {
        type: actionTypes.STORE_ADD,
        data: item
    }
}

export function rm(item) {
    return {
        type: actionTypes.STORE_RM,
        data: item
    }
}

3.index.js

//生成store容器

import { createStore } from 'redux';
import Reducers from './reducers';

export default function configureStore(initialState) {
    const store = createStore(Reducers,initialState,
        // 触发 redux-devtools
        window.devToolsExtension ? window.devToolsExtension() : undefined
    );
    return store;
}

4.reducer.js

//定义Redux规则
import { combineReducers } from 'redux';
import * as actionTypes from './action-types.js';
import initialState from './state.js';

const userInfo = (state = initialState, action) => { 
    console.log(action.data,'action')
    switch (action.type) {
        case actionTypes.STORE_UPDATE:
            // state.userName=action.data;
            // console.log(state.userName)
            // return state;
            // 利用拷贝进行动态渲染 
            return Object.assign({}, state,{userName:action.data});
        case actionTypes.STORE_ADD:
            state.id.unshift(action.data.id);
            return state;
        case actionTypes.STORE_RM:
            state.id = state.id.filter(item => {
                if(item !== action.data.id) {
                    return state.id;
                }
            })
            return state;
        default:
            return state
    }
}
export default combineReducers({
    userInfo
})
// export default combineReducers({
//     userInfo
// })

5.state.js

//Redux全局初始状态
export default {
    cityName: '北京',//定位地址 默认北京
    userName: 'wangming',//用户名
    id:[],
    // type:'STORE_UPDATE',
    // data: '123'
}

6.在react中的实际应用


import React, { Component } from 'react';
import { HashRouter, Switch, Route, Redirect,withRouter } from 'react-router-dom';
import {update} from '../../redux/actions'
import { connect } from 'react-redux'
class Dlist extends React.Component {
    constructor(props) {
        super(props)
        this.state = {isToggleOn: true,dmt:'12'};
        // this.handleClick2 = this.handleClick2.bind(this); 
    }
    handClick=()=>{
        console.log('btn is click');
        this.setState({
            dmt: '13'
          });
        console.log(this.refs.myNum.value);
    }
    // 必须使用箭头函数才能取到this
    handClick2=()=>{
        console.log('接收传递的消息');
        this.props.func();
        console.log(this);
    }
   
render() {
    // const { getFieldProps } = this.props.form;
    const { PayIncrease } = this.props
    return (
       <div>
          <div> delist</div>
          <div> {this.props.list}</div>
          <div> {this.props.title}</div>
          <div> {this.props.userName}</div>
          
          <input type="text" ref="myNum" />
          <div> {React.Children.map(this.props.children,function(child){
              return child

          })}</div>
          <button onClick={this.handClick}>clik me</button>
          <button onClick={this.props.func}>注册</button>
          <button onClick={this.handClick2}>方法传递</button>
          <button onClick={PayIncrease}>升职加薪</button>
        </div>
        
    );
  }
  componentDidMount(){
      console.log(this)
    //   console.log(store);
    this.props.func();
    // setTimeout(()=>{
    // this.props.history.push('/layout/second');
    // },2000)
}
}

// const BasicInputExampleWrapper = createForm()(BasicInputExample);
// ReactDOM.render(<BasicInputExampleWrapper />, mountNode);
// class Login extends Component {
//   render() {
//     return (
//       <BasicInputExample />
//     );
//   }
// }
//需要渲染什么数据
const getList = state => {
    console.log(state,'state')
    return {
        list: state.userInfo.cityName,
        userName:state.userInfo.userName
    }
}
console.log(getList, 'getList')
//需要触发什么行为,必须要引用redux中actions的方法
function mapDispatchToProps(dispatch) {
    // console.log(dispatch(update()),'dispatch')
    return {
        PayIncrease: () => {dispatch(update('libai'));console.log()},
        PayDecrease: () => dispatch()
    }
  }
// Dlist = connect()(Dlist)
export default connect(getList,mapDispatchToProps)(Dlist);

7.index.js 在全局中的引入

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import * as serviceWorker from './serviceWorker';
import routes from './configs/router.config'
import RouteWithSubRoutes from './configs/route-with-sub-routes'
import 'antd-mobile/dist/antd-mobile.css';  // or 'antd-mobile/dist/antd-mobile.less'
import { Provider } from 'react-redux';
import configureStore from './redux/index.js';
import {BrowserRouter as Router,Route, Switch,Redirect } from 'react-router-dom';
import {
    update,
    add,
    rm
  } from './redux/actions'
  
// import { Button } from 'antd-mobile';
// ReactDOM.render(<Button>Start</Button>, mountNode);
const store = configureStore();
// console.log(store.getState(),'123');
// store.dispatch(update('libai'))
console.log(store.getState(),'123')
ReactDOM.render( 
    // let token = 'qwe'
    <Provider store={store} >
        {/* <Routes /> */}
        <Router>
        <Switch>
                         {routes.map((route, i) => <RouteWithSubRoutes key={i} {...route} />)}
                    </Switch>
        {/* <Switch>           
        { 
            routes.map((route, index) => { 
            // return <Route key={index} path={route.path} exact render={props =>
            //     (!route.auth ? (<route.component {...props} routes={route.routes}/>) : (true ? <route.component {...props} routes={route.routes} /> : 
            //     <Redirect to={{pathname: '/',state: { from: props.location }}} />)
            //     )} />
            return <Route key={index} path={route.path} exact render={props =>
                <route.component {...props} routes={route.routes}/>} />
        })

        }
        </Switch> */}
        </Router>
    </Provider>
    , 
    document.getElementById('root')
);

serviceWorker.unregister();

其他redux的高级用法请参考https://www.redux.org.cn/docs/basics/Reducers.html

实例讲解react+react-router+redux 前言总括: 本文采用react+redux+react-router+less+es6+webpack,以实现一个简易备忘录(todolist)为例尽可能全面的讲述使用react全家桶实现一个完整应用的过程。 代码地址:React全家桶实现一个简易备忘录 原文博客地址:React全家桶实现一个简易备忘录 知乎专栏&&简书专题:前端进击者(知乎)&&前端进击者(简书) 博主博客地址:Damonare的 阅读详情

相关推荐

React & 用一个简单案例体验一遍 React-dom & React-router & React-redux 全家桶

用一个简单案例帮你过一遍 React 全家桶——React-dom & React-router & Redux-redux

Thinking anywhere anytime. 1162

React Router v6 探索

前言 没事翻了翻 React Router 的文档,发现已推到了 v6.2.2 版本,这个版本做了很大的改动,让我们一起看看吧 为什么推出 v6 推出 v6 的最大原因是 React Hooks 的出现 v6 写的代码要比 v5 代码更加紧凑和优雅 我们通过代码来感受下,这是 v6 写的伪代码 import { Routes, Route, useParams } from "react-router-dom"; function App() { return ( &l

weixin_42439919的博客 917

react-redux-router:react 全家桶

react-router-reudx 全家桶模板 1 基于create react app 脚手架二次开发增加装饰器语法 2 ui 库选择的事 antdDesing 和 react-boostrap 3 路由用的 4.0 4 只是一个空模板大家可以下载下来自由写组件 5 增加可编辑的 treeTable组件     6 7 先npm i  然后 npm run start 点下主页改组件就会显示在页面中

React学习笔记七——React-router-web的使用详解

] } ]; //对路由组件容器的二次封装 const RouteWithSubRoutes = route => ( <Route path={route.path} render={props => ( <route.component {…props} routes={route.routes} /> )} /> ); const RouteConfigExample = () => ( Tacos Sandwiches {routes.map

m0_70273331的博客 245

Ovito隐藏技巧:用Expression Selection快速提取分子链(附模糊背景配置参数)

本文详细介绍了Ovito软件中Expression Selection功能的隐藏技巧,用于从复杂的分子动力学模拟数据中快速、精准地提取目标分子链。通过结合Expand Selection和Invert Selection等修饰器,形成一套高效的工作流,并深入解析了实现SCI论文级渲染效果的景深模糊参数配置,帮助研究者大幅提升数据处理与图片生成效率。

pz890123的博客 867

海思MPP平台千兆以太网驱动集成与测试指南

千兆以太网(GE)是嵌入式视觉系统中音视频流传输与边缘控制的核心物理接口,其底层驱动需兼顾DMA高效调度、中断实时响应与PHY链路稳定性。在Linux嵌入式环境中,GE驱动通常基于net_device框架实现,并深度耦合于SoC专用媒体处理平台(如海思MPP),通过硬件抽象层(HAL)屏蔽寄存器操作,提供零拷贝、RGMII时序适配、描述符环管理等关键能力。技术价值体现在降低CPU负载、保障1080p@30fps实时推流、支持ONVIF/RTSP协议交互及固件远程升级。典型应用场景包括网络摄像机(IPC)、A

weixin_42599908的博客 89

React-router 复习

官方文档:https://reacttraining.com/react-router/web/guides/philosophyReact-routerReact-router和React-router-dom React-router提供了一些router的核心api,包括Router, Route, Switch等,但是它没有提供dom操作进行跳转的api。 React-router-dom提

extendworld的博客 1217

VC Spyglass实战指南:从零开始掌握CDC约束配置与调试

本文详细介绍了如何使用VC Spyglass进行CDC约束配置与调试,从基础环境搭建到典型CDC问题调试实战,帮助开发者快速掌握跨时钟域验证技术。通过TCL脚本和SDC约束的深度解析,提升CDC验证效率,避免常见设计风险。

weixin_26757925的博客 294

react-router-dom中如何进行路由权限控制,路由验权,props传值

1.router.config.js 这里存放了所有路由 import React from 'react' // import { Router, Route, IndexRoute, hashHistory, childRoutes/* , Redirect */ } from 'react-router' import {BrowserRouter as Router, Route, S...

beichen3997的博客 6250

Unity FPS射击控制系统:数据驱动的武器行为解耦方案

在Unity第一人称射击(FPS)开发中,射击系统常因输入、状态、行为耦合导致连发异常、换弹冲突与网络同步失准。其本质是缺乏对‘武器行为’(如后坐力曲线、弹药逻辑)与‘射击控制’(如输入合法性校验、冷却调度)的正交分离。本方案基于ScriptableObject实现WeaponData数据资产化,配合ShootingController状态机服务,达成输入解耦、运行时参数可调、协程受控、网络预测友好等工程目标。适用于中大型FPS项目架构升级与数据驱动转型,尤其解决Unity InputSystem与物理反馈

weixin_30536861的博客 608

麒麟v10(ky10.x86_64)升级——openssl-3.2.2、openssh-9.8p1

执行命令: make -j 4 && make install 这里要等待一段时间,等待编译完成。执行命令: ./configure --prefix=/usr/local/src/zlilb。执行命令: ./config --prefix=/usr/local/src/openssl。执行命令: make -j 4 && make test && make install。执行命令: make -j 4 && make install。执行命令: /etc/init.d/sshd restart。

X_yufei的博客 7428

[react]react-router-dom 与 redux 版本升级

import {},return {},//对使用到的状态更新return {},return {},},/*** 触发的处理函数* @param state 设置一个初始值,若没有显示该初始值*/})default:/*** 身份证号*/})default:/***/})default:/***/})default:/*** 多个reducer方法*/})phone: "",});});});

前端 1754

HMC7044芯片模拟SPI配置

摘要: HMC7044是一款高性能双环路整数N分频抖动衰减器,支持SPI接口配置,适用于高速数据转换器时钟系统。该芯片采用双PLL级联架构,具有14路可配置输出,可满足GSM/LTE基站设计需求。SPI接口采用3线模式(SLEN/SCLK/SDATA),支持24位寄存器读写(13位地址+8位数据)。驱动实现基于Zynq EMIO模拟SPI,提供初始化、数据传输及寄存器配置功能,支持三线制工作模式和多种时钟参数设置。

toonyhe的博客 1094

react全家桶从0搭建一个完整的react项目(react-router4、redux、redux-saga)

react全家桶从0到1(最新) 本文从零开始,逐步讲解如何用react全家桶搭建一个完整的react项目。文中针对react、webpack、babel、react-route、redux、redux-saga的核心配置会加以讲解,通过这个项目,可以系统的了解react技术栈的主要知识,避免搭建一次后面就忘记的情况。 代码库:https://github.com/teapot-py/react-...

郑清 1万+

基于STM32F407标准库与SimpleFOC实现无刷电机2804位置闭环控制的实战解析

本文详细解析了基于STM32F407标准库与SimpleFOC算法实现2804无刷电机位置闭环控制的实战过程。通过硬件选型、速度闭环调试到位置环PID参数整定,提供了完整的工程实现方案和抗饱和策略,帮助开发者掌握高精度电机控制技术。

oauth7security的博客 917

YOLO系列算法改进 | Neck改进篇 | 融合FAAFusion傅里叶角度对齐模块 | 攻克多尺度方向特征冲突,角度检测精度飙升! | CVPR 2026

YOLO系列算法改进 | Neck改进篇 | 融合FAAFusion傅里叶角度对齐模块 | 攻克多尺度方向特征冲突,角度检测精度飙升! | CVPR 2026 (以YOLO26最新目标检测模型为基础,利用FAAFusion傅里叶角度对齐模块改进Neck部分)

2502_91881744的博客 315

react搭建router,redux教程

/ 定义仓库// 引入configureStore 定义仓库// 导入counterSlice// 导出// 数据处理reducer: {counter});/** @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE*/// 定义仓库。

m0_74079648的博客 1307

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

react项目搭建create-router-dom,redux详细解说

react项目搭建create-router-dom,redux详细解说1.搭建react脚手架首先选择脚手架,dav-cli,create-react-app,Ant-Design-Pro-cli。脚手架即为代码层次。这里我们选用create-react-app脚手架打开我们的cmd,window+R输入cmd进入终端,...

cnzzs的博客 1205

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

react项目中的redux以及react-router-dom

app组件{change(‘我是参数’,e)}}>获取事件对象e{change(e)}}>获取事件对象e

h960822的博客 1006

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

react-router-redux 和 connected-react-router 绑定路由

react-router-redux import React from "react"; import ReactDOM from "react-dom"; import { createStore, combineReducers, applyMiddleware } from "redux"; import { Provider } from "react-redux"; import ...

沐光之辰 4132

React之react-router-dom

1:一些区别react-router React Router 核心react-router-dom 用于 DOM 绑定的 React Routerreact-router-native 用于 React Native 的 React Routerreact-router-redux React Router 和 Redux 的集成react-router-config 静态路由配置的小助手2:地...

蓝莓味的鱼 1332

React专题:react,redux以及react-redux常见一些面试题

Redux作为一个通用模块,主要还是用来处理应用中state的变更,通过react-redux做连接,可以在React+Redux的项目中将两者结合的更好。state 可能会随着时间的推移而发生突变,但多数时候是作为用户事件行为的结果。react比vue好的另一点是,它是团队维护,而vue属于个人,一般来说,大型项目更倾向于react,小型则用vue,当然这也不是绝对。背景:Redux 的基本做法,是用户发出 Action,Reducer 函数立刻算出新的 State,View 重新渲染,但这是做同步。

qq_41812443的博客 1712

React 路由: react-router-dom 前端路由 + connected-react-router 与 redux 连用

React 路由: react-router-dom 前端路由 + connected-react-router 与 redux 连用 文章目录React 路由: react-router-dom 前端路由 + connected-react-router 与 redux 连用前言正文1. 基础使用1.0 安装依赖1.1 路由定义1.2 匹配类组件1.3 匹配函数组件1.3.1 非直接相关函数组件1.3.2 非直接相关类组件2. 与 redux 连用2.0 安装依赖2.1 configureStore 配置

超悠閒的博客 885

React 全家桶(react脚手架 redux react-redux react-router-dom ui库 reactHook)含 自定义hook的方法及使用

React 全家桶(react脚手架 redux react-redux react-router-dom ui库 reactHook)含 自定义hook的方法及使用

秋天,黄叶坠地,凉风有信。 1444

react-router和react-redux使用

### React-Redux使用方法: 一、基础概念 1.使用场景 React 只是 DOM 的一个抽象层,并不是 Web 应用的完整解决方案。有两个方面,它没涉及。于大型的复杂应用来说,这两方面恰恰是最关键的: 代码结构 组件之间的通信 因此,只用 React 没法写大型应用,Redux 出现,将 Flux 与函数式编程结合一起写大型项目。但是,如果...

RuiKe的博客 1081

React 中的 router -- redux

目录介绍ReduxRedux的使用简单使用combineReducers合并redux和react的联合使用 介绍Redux redux与vuex一样是一个组件的状态(数据)管理器,当我们需要在项目各组件中共享数据时可以使用 redux是一个第三方的库,本身和react没有任何关系,react-redux也是一个第三方库,可以帮助我们在react项目中更好的使用redux Redux的使用 组成: action 操作方法(用户通过界面进行触发方法) reducer 方法具体实现(用来改变state数据

weixin_49346957的博客 1847
上一篇: react-router-dom中如何进行路由权限控制,路由验权,props传值
下一篇: wepy中在小程序中使用filter过滤
beichen3997
博客等级 码龄9年 96粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值