React中react-redux和路由详解

目录
  • 观察者模式解决组件间通信问题
  • react-redux
  • connect方法
  • Provider组件
  • 路由
  • 使用路由
  • 默认路由
  • 路由重定向
  • 获取路由参数
  • 路由导航

观察者模式解决组件间通信问题

使用观察者解决组件间通信,分成两步

  • 在一个组件中,订阅消息
  • 在另一个组件中,发布消息

发布消息之后,订阅的消息回调函数会执行,在函数中,我们修改状态,这样就可以实现组件间通信了。这就是reflux框架的实现。

react-redux

redux早期被设计成可以在各个框架中使用,因此在不同的框架中使用的时候,要引入相应的插件

在react中使用要引入react-redux,因此我们要安装这个模块

npm install react-redex

react-redux提供了一个方法和一个组件:

connect方法

为组件的属性拓展store中的信息(state,dispatch)的方法

connect方法有两个参数,都是函数

第一个参数表示如何为组件的属性拓展store中的state数据

参数是state

返回值是对象,就是为属性拓展的数据

第二个参数表示如何为组件的属性拓展store中的dispatch方法

参数就是dispatch

返回值是对象,就是为属性拓展的方法

connect方法的返回值是一个新方法,就是为组件拓展的方法。

参数是组件

返回值是新组件,这个新的组件就拥有了state数据和dispatch方法了

Provider组件

用来为应用程序提供store对象的组件

store属性,就是绑定添加的store

Provider组件中我们可以渲染应用程序组件

在应用程序中,这些被connect方法处理的组件就会接收store中的数据了

注意:只有通过connect的处理方法处理之后的组件具有state和dispatch,其他的组件没有这些信息

想让其它组件具有store中的state和dispatch,有两种途径:

  • 第一种,具有state数据和dispatch方法的组件中,向子组件传递(最常用)
  • 第二种,再用处理方法,处理其他的组件。

路由

从14版本开始,react路由为了实现react多端适配的理想,将react路由拆分成不同类型的。

例如在web端要使用web端路由,在native端要使用nativate路由等等

我们开发web端,要安装react-router-dom路由

npm install react-router-dom

使用路由

使用路由分成三步:

第一步 定义路由渲染容器元素(渲染位置)

  • 可以通过Swtich组件定义
  • 可以通过Route组件定义每一条路由规则
  • path 定义路由规则
  • component定义路由渲染的组件
  • name 定义路由的名称

第二步 定义路由的渲染方式(规则)

常用的有两种:

  • BrowserRouter:基于path,实现的路由规则,需要服务器端的配合
  • HashRouter:基于hash,实现的路由规则,不需要服务器端配合
    • 我们通过路由渲染模式组件,渲染应用程序
    • 将应用程序组件,定义在该组件内

第三步 用render方法,渲染第二步得到的结果

默认路由

在react路由中,让path匹配*,即可定义默认路由

由于​​*​​匹配的非常广,因此我们常常把它配置在最后面

路由重定向

我们通过Redirect组件定义重定向路由

from定义匹配的规则

to定义重定向的规则

获取路由参数

在react中,我们​​使用路由的组件​​,会自动拓展一些属性

history表示对全局的history历史对象的模拟

location表示对全局的location对象的模块,但是只是处理路由这一部分

match表示路由数据对象(解析后的数据,因此工作中常用)

其他没有通过路由渲染的组件是不具备这些信息,想具有这些信息,我们可以通过组件间通信的技术,依次传递这些数据信息

路由导航

我们通过Link组件定义路由导航

通过to属性定义导航地址,即使是hash路由也不要加#

默认渲染成a标签

举例:

// 引入路由
import { Switch, Route, HashRouter, Redirect, Link } from 'react-router-dom';
// 应用程序
class App extends Component {
render() {
console.log('app', this)
return (
<div>
<h1>app</h1>
{/*导航*/}
<Link to="/home">首页</Link>
<Link to="/list/17">列表页</Link>
<Link to="/detail/17">详情页</Link>
{/*第一步 定义路由渲染位置*/}
<Switch>
{/*Route定义规则*/}
<Route path="/home" component={Home}></Route>
<Route path="/list/:page" component={List}></Route>
<Route path="/detail/:id" component={Detail}></Route>
{/*输入ickt进入detail/ickt详情页*/}
<Redirect from="/ickt" to="/detail/ickt"></Redirect>
{/*默认路由*/}
<Route path="*" component={Home}></Route>
</Switch>
</div>
)
}
}
// 首页
class Home extends Component {
render() {
console.log('home', this)
return (
<div>
<h1>home</h1>
</div>
)
}
}
// 列表页
class List extends Component {
render() {
console.log('list', this)
return (
<div>
<h1>list</h1>
</div>
)
}
}
// 详情页
class Detail extends Component {
render() {
console.log('detail', this)
// 解构数据
let { history, match } = this.props;
return (
<div>
<h1>detail</h1>
<Demo history={history} match={match}></Demo>
</div>
)
}
}
// 详情页
class Demo extends Component {
render() {
console.log('demo', this)
return (
<div>
<h2>demo</h2>
</div>
)
}
}
// 第二步 确定渲染方式
let routes = (
<HashRouter>
<App></App>
</HashRouter>
)
// 第三步 渲染第二步结果
render(routes, app)

到此这篇关于React中react-redux和路由详解的文章就介绍到这了,更多相关React react-redux 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • React在组件中如何监听redux中state状态的改变

    目录 在组件中监听redux中state状态的改变 解决方式 React和redux的状态处理 在组件中监听redux中state状态的改变 解决方式 1.在组件中引入store 2.在constructor构造器方法中,重写store.subscribe方法(该方法即是监听state状态改变的放过) 组件完整代码如下: import React, { Component } from 'react' import CSSModules from 'react-css-modules'  imp

  • react18中react-redux状态管理的实现

    react的状态管理还是挺多的现在流行的有以下五种: Recoil MobX XState Redux Context 今天我们来讲一下react众多状态管理之一的redux,虽然这个我不太喜欢用,但是我觉得简单的状态管理谁都会,但是难的就是程序员的分水岭,所以今天来给大家讲一下redux. 下面我们来讲讲redux的优点: 可以在众多组件中传值,突破react单向数据流的限制 不仅支持react还支持vue等主流框架 当然是好用方便啦 接下来我们讲一下啥时候去使用他 在我们有好多组件,但是组件

  • react router4+redux实现路由权限控制的方法

    总体概述 一个完善的路由系统应该是这样子的,当链接到的组件是需要登录后才能查看,要能够跳转到登录页,然后登录成功后又跳回来之前想访问的页面.这里主要是用一个权限控制类来定义路由路由信息,同时用redux把登录成功后要访问的路由地址给保存起来,登录成功时看redux里面有没有存地址,如果没有存地址就跳转到默认路由地址. 路由权限控制类 在这个方法里面,通过sessionStorage判断是否登录了,如果没有登录,就保存一下当前想要跳转的路由到redux里面.然后跳转到我们登录页. import R

  • React与Redux之数组处理讲解

    本文将介绍一些常用的数组处理函数和语法,如reduce().filter().map().every().some().展开运算符.这些知识和React与Redux本身没有直接关系,但是本章的示例中包含了这些函数和语法的用法,我们正好可以在程序中学习它们.另外值得一提的是,reduce().filter().map()等函数的思想来自函数式编程,感谢JavaScript是一门函数式编程语言,让原本复杂的逻辑处理变得如此简单. reduce() 概述 reduce()方法接收一个函数作为累加器(a

  • React路由中的redux和redux知识点拓展

    目录 路由中使用redux 路由reducer Redux拓展 state拓展 action拓展 静态action 动态action 异步action 异步action中间件 路由中使用redux 在路由中使用redux只需要两步: 第一步 在路由策略组件中(如HashRouter),渲染Route组件,并在该Route路由规则组件中,引入connect方法处理后的应用程序组件 第二步 在Provider组件中,渲染路由策略组件(如HashRouter). 注意:路由规则渲染组件的时候,路由规则

  • React 中使用 Redux 的 4 种写法小结

    目录 不使用 Redux 的写法 最底层的写法 React-Redux React-Redux 配合 connect 高阶组件 React-Rudex 配合 React Hooks Redux Toolkit 总结 Redux 是一种状态容器 JS 库,提供可预测的状态管理,经常和 React 配合来管理应用的全局状态,进行响应式组件更新. Redux 一般来说并不是必须的,只有在项目比较复杂的时候,比如多个分散在不同地方的组件使用同一个状态.对于这种情况,如果通过 props 层层传递,代码会

  • 详解React 和 Redux的关系

    目录 一.redux和react的关系 二.react多组件共享 三.redux的三个核心概念 1.store 2.action (动作) 3.reducer (纯函数) 总结 文档: Redux中文文档 Redux 官方文档对 Redux 的定义是:一个可预测的 JavaScript 应用状态管理容器. 一.redux和react的关系 Redux并不只为react应用提供状态管理, 它还支持其它的框架. React 是 DOM 的一个抽象层(UI 库),并不是 Web 应用的完整解决方案.因

  • react.js框架Redux基础案例详解

    react.js框架Redux https://github.com/reactjs/redux 安装: npm install redux react-redux #基于react,我们在前面已经安装过了 Redux参考文档: http://redux.js.org/ Redux核心概念:Store 我们可以简单的理解为就是用来存储 各个组件的State或你自己定义的独立的state,对state进行统一读取.更新.监听等操作. http://redux.js.org/docs/basics/

  • react中的ajax封装实例详解

    react中的ajax封装实例详解 代码块 **opts: {'可选参数'} **method: 请求方式:GET/POST,默认值:'GET'; **url: 发送请求的地址, 默认值: 当前页地址; **data: string,json; **async: 是否异步:true/false,默认值:true; **cache: 是否缓存:true/false,默认值:true; **contentType: HTTP头信息,默认值:'application/x-www-form-urlenc

  • React 中 setState 的异步操作案例详解

    目录 前言 React 中的 setState 为什么需要异步操作? 什么时候setState会进行同步操作? 前言 在使用state的时候, 如果我们企图直接修改state中的某一个值之后直接打印(使用)他,就会发现,他其实并没有改变. 就像下面的例子,企图通过点击事件之后就使用修改之后的state的值,但是会发state中的并没有被立即修改,还是原先的值,我们都知道那是因为 setState就相当于是一个异步操作,不能立即被修改. import React, { Component } fr

  • React中useLayoutEffect钩子使用场景详解

    目录 简介 useEffect钩子的概述 钩子流程 useLayoutEffect钩子的概述 钩子流程 什么时候使用useLayoutEffect钩子? 总结 简介 不久前,React对其功能组件进行了一次重大更新(在2019年3月的16.8版本中),终于为这些组件提供了一种变得有状态的方法. 钩子的加入不仅意味着功能组件将能够提供自己的状态,而且还能通过引入useEffect钩子来管理自己的生命周期事件. 此外,这次更新还引入了一个全新的useLayoutEffect钩子,根据React文档,

  • React中使用Vditor自定义图片详解

    安装 npm install vditor -s 引用 导入依赖包 import Vditor from "vditor"; 导入样式 import "vditor/src/assets/scss/index.scss"; 使用示例 export default class Vditor extends Component { constructor(props) { super(props); this.state = { editValue: "&qu

  • React中如何引入Angular组件详解

    前言 为了在我的编辑器中使用 Angular,我用 Angular 编写了一个重命名功能.而为了使用它,我得再次使用一次 customEvent ,而在这个微前端架构的系统中,其事件通讯机制已经相当的复杂.在这部分的代码进一步恶化之前,我得尝试有没有别的方式.于是,我想到了之前在其它组件中使用的 Web Components 技术,而 Angular 6 正好可以支持. 下面话不多说了,来一起看看详细的介绍吧 HTML 中引入 Web Components 我所需要做的事情也相当的简单,只需要将

  • React中Ref 的使用方法详解

    本文实例讲述了React中Ref 的使用方法.分享给大家供大家参考,具体如下: React中Ref 的使用 React v16.6.3 在典型的React数据流中,props是父组件与其子组件交互的唯一方式.要修改子项,请使用new props 重新呈现它.但是,在某些情况下,需要在典型数据流之外强制修改子项.要修改的子项可以是React组件的实例,也可以是DOM元素.对于这两种情况,React都提供了api. 何时使用refs refs有一些很好的用例: 1.文本选择或媒体播放. 2.触发势在

  • react中JSX的注意点详解

    目录 1JSX是一个表达式 2JSX的属性 2.1驼峰命名 2.2style接收一个对象 3JSX标签没有子元素 4JSX防止注入攻击 5唯一父元素 总结 1 JSX 是一个表达式 JSX 是 JavaScript 的语法扩展,本质上是 React.createElement()方法的语法糖. Babel 会把 JSX 转译成一个名为 React.createElement() 函数调用,所以它被看作一个表达式. 这意味着你可以在 if 语句和 for 循环的代码块中使用 JSX,将 JSX 赋

  • sass在react中的基本使用(实例详解)

    目录 1. 安装sass 2. 编写App.tsx中的基本DOM 3. sass变量 4. sass中的选择器嵌套和属性嵌套 5. sass中的@import和Partials 6. Sass中的 @mixin 与 @include 7.sass中的继承 @extend 8. 源代码 1. 安装sass 较新的版本不需要配置sass-loader等一系列插件,安装即用. npm install --save-dev sass 2. 编写App.tsx中的基本DOM 更改app.css为app.s

  • spring boot中使用RabbitMQ routing路由详解

    在上一个教程中我们创建了一个扇形(fanout)交换器.我们能把消息已广播的形式传递给多个消费者. 要做什么?Routing 路由 在这个教程中,添加一个新的特性,我们可以只订阅消息的一部分.例如,将只连接我们感兴趣的颜色("orange", "black", "green"),并且把消息全部打印在控制台上. 绑定 交换器和队列是一种绑定关系.简单的理解为:队列对来自这个交换器中的信息感兴趣. 绑定可以加上一个额外的参数routingKey.Sp

随机推荐