ZF_react redux connected-react-router将路由与redux连接起

Posted lin-fighting

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZF_react redux connected-react-router将路由与redux连接起相关的知识,希望对你有一定的参考价值。

connected-react-router

需要依赖这个库,连接路由和仓库
作用:

  • 通过派发action动作去修改路劲
    看基本使用:

第一个用来代替Router,第二个是个中间件,第三个是用来创建reducer的。第四个是跳转动作,用来返回一个action

创建路由state以及改造dispatch。
通过dispatch派发Push返回的action

正常跳转。

打印一下Push返回的action,如上。
现在实现一下这个库。

connected-react-router的实现


一共需要四个api。

先看下面两个。
push方法

push是一个函数,会返回一个action。

现在就完成了actions。完成了所有的动作,他们会产生一个action,派发到仓库,在middleware中间件去处理。
从这里就知道为什么要传入history了吧。用来跳转。

架构,所有中间件的实现方式都是类似的,判断action是不是我想要的,是的话就做处理,不是的话就跳过。现在就基本完成了跳转的。来看看效果:


效果一样。

  • 总结:思路就是通过单例模式生成一些Hisotry的动作action,然后通过唯一的type,编写中间件,改写dispatch,使其可以识别这种action再去拿到history实现跳转。

实现redux存储路由信息



当其跳转的时候,redux中router存储的状态是这样的。记录路由的信息。
从源码可以看出这个action就长这样。我们来模拟实现一下。首先在ConnectRouter中实现监听

通过之前实现的react-router知道,history这个对象的listen方法就是用来监听路劲的改变的,参数是最新的state和action。我们通过监听来派发action。
通过这个来生成对应的action,跟源码有点类似。派发action后,应该编写对应的reducer来识别这个action。
路由的reducer是这样创建的,也就是说,connectRouter接受history,返回个reducer.

返回的reducer可以识别对应的action,从而返回最新的state供store修改。
看效果:

可以看到正常显示。

以上是关于ZF_react redux connected-react-router将路由与redux连接起的主要内容,如果未能解决你的问题,请参考以下文章

ZF_react 高阶组件 多个context的实现 render props Purcomponent的实现 React.memo的实现

使用 connect 与 react-redux 和 redux-persist

React-redux @connect 不起作用,但 connect() 可以

P20:Redux进阶-React-redux中的Provider和connect

redux connect的浅比较说明

使用redux-thunk完成异步connect的第二个参数的对象写法。