dva 路由跳转
1.从props取出并传递history
- 取 const { history } = this.props
- 用 <button onClick={ () => history.push('/') }>go back home</button>
2.withRouter, Link
withRouter:
- import { withRouter, Link } from 'dva/router'
- <button onClick={ () => history.push('/') }>go back home</button>
- export default withRouter(Counter);
Link:
- import { withRouter, Link } from 'dva/router'; // 引入组件
- <Link to='/'>home page</Link> 使用
3.routerRedux
- import { routerRedux } from 'dva/router';
- effects: {
- *asyncDecr({ payload }, { call, put }) {
- yield call(delay, );
- yield put({type: 'decrement' });
- yield put( routerRedux.push('/') ); // 路由跳转
- }
- },
使用query-string库可以将对象转化为url参数:
- effects: {
- *asyncDecr({ payload }, { call, put }) {
- yield call(delay, );
- yield put({type: 'decrement' });
- // yield put( routerRedux.push('/') ); // 路由跳转
- yield put( routerRedux.push({
- pathname: '/',
- search: queryString.stringify({
- from: 'product',
- to: 'home'
- })
- }) ); // 路由跳转
- }
- },
效果:
- http://localhost:8000/?from=product&to=home
完整代码:
第一个是model文件products.js 第二个是routes下的UI文件ProductPage.js
- import { delay } from 'dva/saga';
- import { routerRedux } from 'dva/router';
- import queryString from 'query-string';
- export default {
- namespace: 'products',
- state: {
- counter: ,
- },
- effects: {
- *asyncDecr({ payload }, { call, put }) {
- yield call(delay, );
- yield put({type: 'decrement' });
- // yield put( routerRedux.push('/') ); // 路由跳转
- yield put( routerRedux.push({
- pathname: '/',
- search: queryString.stringify({
- from: 'product',
- to: 'home'
- })
- }) ); // 路由跳转
- }
- },
- reducers: {
- 'increment'(state, action) {
- return {
- counter: state.counter +
- }
- },
- 'decrement'(state, action) {
- return {
- counter: state.counter -
- }
- }
- }
- }
- import React, { Component } from 'react';
- import { connect } from 'dva';
- import propTypes from 'prop-types';
- import { Button } from 'antd';
- import styles from './ProductPage.css';
- import { increment, asyncDecr } from '../actions';
- class ProductPage extends Component {
- constructor(props, context) {
- console.log(props);
- super();
- }
- render() {
- const { products, dispatch, increment, asyncDecr } = this.props;
- return (
- <div className={styles.wrapper}>
- <div className={styles.title}>结果 {products.counter}</div>
- <div>
- <p className={styles['p-wrapper']}>
- <Button type="primary" onClick={()=>dispatch({type:'products/increment',payload:})}>incr</Button>
- <Button type="primary" onClick={()=>dispatch({type:'products/asyncDecr',payload:})}>incr</Button>
- </p>
- <p className={styles['p-wrapper']}>
- <Button type="primary" onClick={()=>increment()}>increment</Button>
- <Button type="primary" onClick={()=>asyncDecr()}>asyncDecr</Button>
- </p>
- <Button type="primary">decr</Button>
- </div>
- </div>
- );
- }
- }
- ProductPage.propTypes = {
- counter: propTypes.object
- };
- const mapStateToProps = (state) => {
- return {
- products: state.products,
- };
- };
- export default connect(mapStateToProps, { increment, asyncDecr })(ProductPage);
这里是最后一种路由跳转方式,可以轻松应对各种场景 https://www.tipsns.com/read/34.html
dva 路由跳转的更多相关文章
- 前端笔记之React(七)redux-saga&Dva&路由
一.redux-saga解决异步 redux-thunk 和 redux-saga 使用redux它们是必选的,二选一,它们两个都可以很好的实现一些复杂情况下redux,本质都是为了解决异步actio ...
- vue路由跳转时判断用户是否登录功能
通过判断该用户是否登录过,如果没有登录则跳转到login登录路由,如果登录则正常跳转. 一丶首先在用户登录前后分别给出一个状态来标识此用户是否登录(建议用vuex): 简单用vuex表示一下,不会可以 ...
- Extjs6(四)——侧边栏导航根据路由跳转页面
本文基于ext-6.0.0 之前做的时候这个侧边栏导航是通过tab切换来切换页面的,但是总感觉不太对劲,现在终于发现怎么通过路由跳转了,分享给大家,可能有些不完善的地方,望大家读后可以给些指点.欢迎留 ...
- 关于elementUi tab组件路由跳转卡死问题
好久没来了,周五项目终于要上线了(*^▽^*),上线之前测出一个很恶心的bug真真是... 项目:Vue + elementUi 后台管理项目 问题描述:登录后首次通过侧边栏路由跳转到主页面有ta ...
- 10. vue axios 请求未完成时路由跳转报错问题
axios 请求未完成时路由跳转报错问题 前两天项目基本功能算是完成了,在公司测试时遇到了遇到了一个问题,那就是在请求未完成时进行路由跳转时会报错,想了几种办法来解决,例如加loading,请求拦截, ...
- react-router(v4) 路由跳转后返回页面顶部问题
遇到的问题 由A页面跳转到B页面,B页面停留在A页面的位置,没有返回到顶部. 问题分析 首先分析下出现此问题的原因: 在项目中使用的是 hashHistory,它是建立在 history 之上的,当路 ...
- 2种方式解决vue路由跳转未匹配相应路由避免出现空白页面或者指定404页面
https://www.cnblogs.com/goloving/p/9254084.html https://www.cnblogs.com/goloving/p/9254084.html 1.路由 ...
- vue设置路由跳转参数,以及接收参数
最近做Vue项目,遇到了一个路由跳转问题:首页要跳转到项目页指定的Tab选项卡项,一开始总是跳到默认项.解决方法如下: 在跳转链接处设置了路由跳转参数,如下: <router-link :to ...
- Taro-ui TabBar组件使用路由跳转
1. 安装taro-ui (此处使用cnpm) cnpm install taro-ui 2. 全局引入样式 app.scss sass :@import "~taro-ui/dist/st ...
随机推荐
- webpack究竟是什么
在很久很久以前,当我们写一个web网页的时候,js实现的逻辑相对是比较弱的.但随着前端技术的发展,前端能实现的内容越来越多.在js里面加了非常非常多的逻辑,于是呢,我们就发现我们通过这种面向过程的方式 ...
- mybatis会对多参数方法进行特殊处理
例如:查询id=1,name=tom的一条数据 查询接口: User getUserByIdAndName(Integer id,String name); // <?xml version=& ...
- Ajax同时上传表单序列化参数+自定义参数
$.ajax({ type:'POST', url :"<{:U('jiuzhu/edit')}>", data:$.param({'name1':value1,'na ...
- POST接口底层方法
对于POST请求的接口,我们如何调用它获取到数据,这其中自然少不了底层代码 底层公共类的书写 public class ThirdOpenAPIService { public static Thir ...
- HDU 1207 汉诺塔II (找规律,递推)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1207 汉诺塔II Time Limit: 2000/1000 MS (Java/Others) ...
- iOS应用启动原理图解 及ARC强弱引用
iOS应用启动原理图解(红色箭头表示strong强引用,绿色箭头代表weak若引用) 只要将UI控件拖到Storyboard里控制器的大view上,Xcode会自动将这些控件以强引用的形式加入到sel ...
- C#串口通讯
本文提供一个用C#实现串口通讯实例,亲自编写,亲测可用! 开发环境:VS2008+.net FrameWork3.5(实际上2.0应该也可以) 第一步 创建一个WinForm窗体,拉入一些界面元素 重 ...
- STM32之FSMC
FSMC全称“静态存储器控制器”. 使用FSMC控制器后,可以把FSMC提供的FSMC_A[25:0]作为地址线,而把FSMC提供的FSMC_D[15:0]作为数据总线. (1)当存储数据设为8位时, ...
- HTML5视频播放插件 video.js介绍
video.js是一款很流行的html5视频播放插件.很适合在移动端播放视频(比如微信网页),功能强大,且支持降级到flash,兼容ie8.官网:http://videojs.com/ git& ...
- Oracle登录失败:监听程序当前无法识别连接描述符中请求的服务
Oracle11g下载地址:https://pan.baidu.com/s/1p3RwLUTAl1Ys4yXmXJ3OVQ 安装步骤视频链接:https://pan.baidu.com/s/1c0FC ...