Router入门0x205: react-route + redux + react 集成

news/2025/3/22 2:04:38

0x000 概述

这一章终于大集成了

0x001 集成react

  • 源码

    import React from 'react'
    import ReactDom from 'react-dom'class App extends React.Component {render() {return (<div>react</div>)}
    }ReactDom.render(<App/>,document.getElementById('app')
    )
  • 效果

    clipboard.png

  • 说明:

    • 集成react主要是用到reactreact-router

0X002 集成react-router

  • 源码

    import React from 'react'
    import ReactDom from 'react-dom'
    import {BrowserRouter, Route, withRouter} from 'react-router-dom'class Article extends React.Component {render() {return (<p>article</p>)}
    }let MyArticle = withRouter(Article)class App extends React.Component {render() {return (<div><Route component={MyArticle}></Route></div>)}
    }let MyApp = withRouter(App)ReactDom.render(<BrowserRouter><MyApp/></BrowserRouter>,document.getElementById('app')
    )
  • 效果
    clipboard.png
  • 说明

    • 主要用到react-router-dom库,是针对react-router库在dom环境下的封装
    • withRouter组件,注入matchlocationhistory等属性
    • BrowserRouter接管跟组件
    • Route指定路由和组件的对应关系

0x003 集成redux

  • 源码

    • 引入redux相关的包

      import {Provider, connect} from 'react-redux'
      import {createStore} from 'redux'
    • reducer

      const counter = (state = {counter: 0, num: 0}, action) => {switch (action.type) {case ACTION_INCREMENT:return {...state, ...{counter: ++state.counter}}case ACTION_DECREMENT:return {...state, ...{counter: --state.counter}}default:return state}
      }
    • actionactionCreators

      // action
      const ACTION_INCREMENT = 'INCREMENT'
      const ACTION_DECREMENT = 'DECREMENT'
      // action creator
      const increment = () => ({type: ACTION_INCREMENT
      })
      const decrement = () => ({type: ACTION_DECREMENT
      })
    • 链接组件

      
      // store
      const store = createStore(counter)class Article extends React.Component {render() {return (<p>{this.props.counter}</p>)}
      }let MyArticle = withRouter(connect((state) => {return {counter: state.counter}
      })(Article))class App extends React.Component {render() {return (<div><Route component={MyArticle}></Route><button onClick={() => this.props.increment()}>+</button><button onClick={() => this.props.decrement()}>-</button></div>)}
      }let MyApp = withRouter(connect(() => ({}), (dispatch) => {return {increment: () => dispatch(increment()),decrement: () => dispatch(decrement())}
      })(App))ReactDom.render(<Provider store={store}><BrowserRouter><MyApp/></BrowserRouter></Provider>,document.getElementById('app')
      )
  • 效果

clipboard.png

  • 说明

    • 主要用到reduxreact-redux
    • reduceractionactionCreators都是redux用的
    • Provider接管BrowserRouter,并注入store
    • connect连接组件和store,为组件注入reducer

0x005 总结

每一步都搞懂,下一步才能更明确。

0x006 资源

  • 源码

https://dhexx.cn/news/show-3590679.html

相关文章

修改root密码时,提示athentication token manipulation error

文章来自&#xff1a;http://blog.163.com/junwu_lb/blog/static/1916798920120103647199/ 发生该错误原因是&#xff1a; 1、分区没有空间导致。2、/etc/passwd 和/etc/shadow不同步但是这次上面两条却行不通&#xff0c;通过df查看根分区还有40%剩余。1、尝试修改密码&#x…

互联网级微服务架构神器Duubo

目录 互联网级微服务架构神器Duubo背景zookeeper安装发布Dubbo服务Dubbo Admin管理消费Dubbo服务抽取与依赖版本管理互联网级微服务架构神器Duubo Editor&#xff1a;SimpleWu Dubbo是 阿里巴巴公司开源的一个高性能优秀的服务框架使得应用可通过高性能的 RPC 实现服务的输出和…

12、Java 基础-封装、继承、多态

一、封装 封装从字面上来理解就是包装的意思&#xff0c;专业点就是信息隐藏&#xff0c;是指利用抽象数据类型将数据和基于数据的操作封装在一起&#xff0c;使其构成一个不可分割的独立实体&#xff0c;数据被保护在抽象数据类型的内部&#xff0c;尽可能地隐藏内部的细节&a…

jeesuite分布式框架环境搭建

一、简述这是菜鸟走向开源的第一步。开源项目jeesuite&#xff1a;http://git.oschina.net/vakinge/jeesuite-libsjeesuite是托管在码云上的开源项目&#xff0c;是一个分布式的框架&#xff0c;包含当前主流的框架eg:kafka、Dubbo、Durid、zk、rest等。经过千万级会员、日UV20…

ORACLE中sga那些事

1、查看SGA相关参数&#xff1a; SQL> show parameter sga NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ lock_sga boolean FALSE pre_p…

13、Java 基础-抽象类、接口

一、抽象类 使用abstract修饰符修饰的类。 官方点的定义就是&#xff1a;如果一个类没有包含足够多的信息来描述一个具体的对象&#xff0c;这样的类就是抽象类。 抽象类在实际应用中&#xff0c;更多的是因为类中有抽象方法。抽象方法&#xff1a;只声明&#xff0c;不实现…

mingw 构建 gdal 2.1.2

目录 1、准备2、生成Makefile3、编译4、编译遇到错误及解决办法1、生成静态库时候ar提示参数列表太长2、生成动态库时候g提示参数列表太长前两日有人在oschian上问我mingw编译gdal的一些问题&#xff0c;然后我简单的编译了一次&#xff0c;记录下编译过程。 此文是2017年5月写…

14、Java 基础-异常处理

Java 异常处理 异常处理是java中很重要的部分&#xff0c;我们平时写代码其实有很多情况考虑不到&#xff0c;或者我考虑到这一行代码有可能会报错我就要想如果报错了我怎么去处理他能让他正常的返回信息给我。程序一旦发生了异常&#xff0c;就会直接在异常代码地方直接退出程…

flashbackup

要启用数据库的闪回功能&#xff0c;需要配置一下参数&#xff1a; SQL> show parameter db_recovery NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest…

将非分区表转换为分区表

将非分区表转换为分区表方法有好多种&#xff0c;以其中一种举例&#xff1a; .交换分区&#xff1a; 1. 创建分区表&#xff0c;假设有 2 个分区&#xff0c;P1&#xff0c;P2. 2. 创建表 A 存放 P1 规则的数据。 3. 创建表 B 存放 P2 规则的数据。 4. 用表 A 和 P1 …