导航:首页 > 编程语言 > dvajs页面跳转

dvajs页面跳转

发布时间:2024-07-07 12:07:46

Ⅰ dva 2.0中如何使用代码进行路由跳转

理清关系
dva 升级到 2.0 版本以后,也将内部使用的 dva/router 从 [email protected] 升级到了 [email protected][email protected] 文档 API
[email protected] 让路由变得更简单,最大特点就是可以路由嵌套,可是如果照搬使用 [email protected] 的写法,你会发现在 dva 中是行不通的,查看 dva/router 的源码可以看到:
// dva/router.js
mole.exports = require('react-router-dom');
mole.exports.routerRex = require('react-router-rex');
其中第一行导出的react-router-dom就是 [email protected] 文件,第二行导出的react-router-rex是 react-router 配合 rex 使用的中间库。因为 dva 中使用到了 rex,所以我们在配置的时候还需要注意到这一点。
由于 dva 将react-router-dom和react-router-rex都封装到了 dva/router 中,在使用 [email protected] 和 rex 里面的东西时只需引入 dva/router 这个包即可。
路由跳转
引入 dva/router,使用 routerReux 对象的 push 方法控制,值为要跳转的路由地址,与根目录下 router.js 中配置的路由地址是相同的。routerReux 就是上面 dva/router 第二个导出的 react-router-rex 包对象。
此处示例为跳转到 /user 路由。
// models > app.js
import { routerRex } from 'dva/router';
export default {
// ...
effects: {
// 路由跳转
* redirect ({ payload }, { put }) {
yield put(routerRex.push('/user'));
},
}
// ...
}
携带参数
有时路由的跳转还需要携带参数。
传参:
routerRex.push 方法的第二个参数填写参数对象。此处示例表示跳转到 /user 路由,并携带参数 {name: 'dkvirus', age: 20}。
// models > app.js
import { routerRex } from 'dva/router';
export default {
// ...
effects: {
// 路由跳转
* redirect ({ payload }, { put }) {
yield put(routerRex.push('/user', {name: 'dkvirus', age: 20}));
},
}
// ...
}
接收参数:
// models > user.js
export default {
subscriptions: {
/**
* 监听浏览器地址,当跳转到 /user 时进入该方法
* @param dispatch 触发器,用于触发 effects 中的 query 方法
* @param history 浏览器历史记录,主要用到它的 location 属性以获取地址栏地址
*/
setup ({ dispatch, history }) {
history.listen((location) => {
console.log('location is: %o', location);
console.log('重定向接收参数:%o', location.state)
// 调用 effects 属性中的 query 方法,并将 location.state 作为参数传递
dispatch({
type: 'query',
payload: location.state,
})
});
},
},
effects: {
*query ({ payload }, { call, put }) {
console.log('payload is: %o', payload);
}
}
// ...
}
在 user.js 中 subscriptions 属性会监听路由。当 app.js 中通过代码跳转到 /user 路由,models>user.js>subscriptions 属性中的 setup 方法会被触发,location 记录着相关信息。打印如下。
location is: Object
hash: ""
key: "kss7as"
pathname: "/user"
search: ""
state: {name: "bob", age: 21}
重定向接收参数:Object
age:21
name:"bob"
可以看到 location.state 就是传递过来的参数。在 subscriptions 中可以使用 dispatch 触发 effects 中的方法同时传递参数。
需要注意的事,在 dva@1.* 版本中,要获取对象还要用 location.query 对象,而到了 dva@2.* 就变成了 location.state 对象。

阅读全文

与dvajs页面跳转相关的资料

热点内容
长城c30加装导航升级 浏览:648
压缩包会改变文件内容么 浏览:548
45度面槽怎么编程 浏览:742
苹果6原装充电器多大的 浏览:814
腾讯群文件 浏览:584
win10双击excel文件无法直接打开 浏览:152
dnf90版本剑魂右槽排名 浏览:375
mac给文件夹添加快捷方式到桌面 浏览:221
如何提高配套文件科学性 浏览:552
免费qq在线客服代码 浏览:615
网络摄像机和麦克风的使用点不了 浏览:872
win10资源文件夹卡死 浏览:431
联想笔记本如何添加网络连接 浏览:821
钉钉文件下载到微信用哪个浏览器 浏览:252
word怎么删掉第一页 浏览:215
为什么小米5不能升级系统 浏览:768
复古摄影教程 浏览:803
u盘里文件显示文件夹空 浏览:574
如何编程年月日的进制 浏览:351
升级电脑硬件注意什么 浏览:827

友情链接