完美结合 Redux 与 React-router (react-router不切换页面)
本文可以解答以下问题:
- 链接 redux 后 react-router 不切换页面
- react-router 路由改变页面却不改变
- redux 与 react-router 结合使用的方案
简单的问题我多说两句。
先解决问题: react-router 文档的最后一个 API withRouter。在 connect 组建外面再包裹一层 withRouter。
推荐你接着往下看。
如果把 redux 链接到 Switch 或者 NavLink 以及他们的父组件,会产生一个问题: 路由不会切换页面了,或者 activeStyle 不工作了。react-router 4.x 的使用更加灵活,在 Route 外面绑定智能组件再正常不过,切换不了页面感觉有点尴尬,关键是:和我想的不一样啊!
第一反应就是 react-router-redux。
redux 管理状态,react-router 本质上也就是单页应用的一个状态而已,只不过和 H5 的 history API 联系到了一起,逻辑上 router 应该就是 redux的store 里的一个状态而已,归 redux 管理十分正常。看了看 react-router-redux 的源码,只是利用 history 的 API 修改路由,还有监听路由的变化修改 store。并没有什么魔法,没有解决我的问题。
去 react-router 文档瞅一眼,最后一个 API 藏在角落当时看文档时候一掠而过根本没注意到。withRouter。
原来是这么回事 redux 的 connect 方法重写了组件的 shouldComponentUpdate 方法,导致不能响应 location 的变化而重新渲染组件。withRouter 写在 connect 外面,withRouter 的 shouldComponentUpdate 不会被重写,组件会成功的重新渲染。
问题到此为止解决了,那 react-router-redux 是不是两者结合使用的最佳或者合理的方案么?
我觉得大多数情况下不需要 react-router-redux。
包裹 withRouter 后路由信息可以通过组件 props 获得,还可以通过 history 操控路由获取路由。可以说 react-router 4.x 引入 H5 的 history 后,把路由信息放到 store 里显得毫无必要。
而引入的好处是,对单页应用而言,逻辑上路由确实应该是应用状态的一部分(个人理解)。对需要频繁和在多处操作路由进行深度时光穿梭的应用,他提供了操作的方便性。除此之外,个人认为无必要性。
完美结合 Redux 与 React-router (react-router不切换页面)的更多相关文章
- [React] 10 - Tutorial: router
Ref: REACT JS TUTORIAL #6 - React Router & Intro to Single Page Apps with React JS Ref: REACT JS ...
- React学习(3)——Router路由的使用和页面跳转
React-Router的中文文档可以参照如下链接: http://react-guide.github.io/react-router-cn/docs/Introduction.html 文档中介绍 ...
- react ---- Router路由的使用和页面跳转
React-Router的中文文档可以参照如下链接: http://react-guide.github.io/react-router-cn/docs/Introduction.html 首先,我们 ...
- react,react-router,redux+react-redux 构建一个React Demo
创建初始化应用 加速我们的npm. npm install -g cnpm --registry=https://registry.npm.taobao.org 利用create-react-app ...
- redux 介绍及配合 react开发
前言 本文是 Redux 及 Redux 配合 React 开发的教程,主要翻译自 Leveling Up with React: Redux,并参考了 Redux 的文档及一些博文,相对译文原文内容 ...
- 使用Redux管理你的React应用
因为redux和react的版本更新的比较频繁,博客园这里用的redux版本是1.0.1,如果你关心最新版本的使用技巧,欢迎来我的Github查看(https://github.com/matthew ...
- Redux管理你的React应用
使用Redux管理你的React应用 因为redux和react的版本更新的比较频繁,博客园这里用的redux版本是1.0.1,如果你关心最新版本的使用技巧,欢迎来我的Github查看(https ...
- 【redux】详解react/redux的服务端渲染:页面性能与SEO
亟待解决的疑问 为什么服务端渲染首屏渲染快?(对比客户端首屏渲染) react客户端渲染的一大痛点就是首屏渲染速度慢问题,因为react是一个单页面应用,大多数的资源需要在首次渲染前就加载 ...
- Redux学习(3) ----- 结合React使用
Redux 和React 进行结合, 就是用React 做UI, 因为Redux中定义了state,并且定义了改变或获取state的方法,完全可以用来进行状态管理,React中就不用保存状态了,它只要 ...
- [React + Functional Programming ADT] Connect State ADT Based Redux Actions to a React Application
With our Redux implementation lousy with State ADT based reducers, it is time to hook it all up to a ...
随机推荐
- tokuDB 安装与备份小记
线上的数据增长越来越快,数据量的增长也愈来愈大,尤其是日志类数据,这对于数据迁移.数据备份恢复而言,都是一个非常大的挑战. 于是想到了 13 年开源 tokuDB 存储引擎,来解决我们迫在眉睫的容量问 ...
- CCS学习(三)
边框样式 边框线 dorder-style (top 上: bottom 下: left 左: right 右) 样式:none | hidden | dotted | dashed | sol ...
- maven工程中pom.xml的错误
更新maven工程,出现如下错误信息. Could not calculate build plan: Failure to transfer org.apache.maven.plugins:mav ...
- Luogu T7152 细胞(递推,矩阵乘法,快速幂)
Luogu T7152 细胞(递推,矩阵乘法,快速幂) Description 小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并 观察细胞分裂的规律. 他选取了一种特别的细胞,每 ...
- memcache缓存安装配置
memcache是高性能,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度.目前用memcache解决互联网上的大用户读取是非常流行的一种用法. 下载安装 前提要先安装libev ...
- localStorage和sessionStorage的使用方法和一些特性介绍
本文主要介绍的是localStorage和sessionStorage的使用方法和一些特性,以及一些其他的存储方式的比较. 客服端存储方案包括以下几种: 1.Cookie 2.Us ...
- synchronized优化
重量级锁 synchronized关键字 前文解释了synchronized的实现和运用,了解monitor的作用,但是由于monitor监视器锁的操作是基于操作系统的底层Mutex Lock实现的, ...
- [luogu P3797] 妖梦斩木棒 [线段树]
题目背景 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了一支非常长的木棒,妖梦把它们切成了等长的n段.现在这个木棒可以看做由三种小段构成,中间的 ...
- 浅谈JVM与内存分配
一.程序内存分配 初始内存分配 当一个程序准备运行时,它首先向java虚拟机要内存,但是java虚拟机本身没有权限,它只能向操作系统申请内存,此时java虚拟机会拥有一个初始内存, 此处额外说明一下e ...
- 【NOI模拟】谈笑风生(主席树)
题目描述 设 T 为一棵有根树,我们做如下的定义: 设 a 和 b 为 T 中的两个不同节点.如果 a 是 b 的祖先,那么称 “ a 比 b 不知道高明到哪里去了 ” . 设 a 和 b 为 T 中 ...