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修改。
看效果:在这里插入图片描述

可以看到正常显示。

猜你喜欢

转载自blog.csdn.net/lin_fightin/article/details/121113905