美文网首页
query与params的页面传值

query与params的页面传值

作者: miner敏儿 | 来源:发表于2018-11-27 11:36 被阅读0次

先简单记录页面传值, 还没完全弄懂其中的原理
先配置路径跳转

const SubRoutes = {
  prefix: 'parentPath',
  subRoutes: [
    {
      name: '子路由',
      path: 'children',
      params: ':data', // 这个地方的修改可以是 params: ':id'
    },
  ],
};

export default SubRoutes;

params data传参

params传参

跳转页面

 const data = JSON.stringify({ id: this.id, name: this.name }); // 传到children中参数的值
 this.props.history.push(`/parentPath/children/${data}`);

children.js中

通过this.props.match.params.data接收


componentDidMount() {
const data = JSON.parse(this.props.match.params.data);
this.id = data.id;
this.name = data.name;
}

query传参

query传参

上面的路径跳转配置,
不写params这个参数

 <Link to={{pathname:'/parentPath/children',query:{id:this.id, name: this.name}}}>跳转到</Link>

在children.js

通过this.location.query.id接收

componentDidMount() {
const loc = this.props.location;
this.id = loc.query.id;
}
image.png

发现个问题, 一开始可以取到值, 但是当你在当前页面进行刷新的时候, 你会发现并没有这个值.并且报错, 会报'加载组件错误== TypeError: Cannot read property 'id' of undefined
at CatalogDetails.componentWillMount (index.js?c7f7:97)' 为啥???????
打印出来以后会发现没有query参数了

image.png

解决query传参刷新页面获取数据失败问题

所以如果想成功就必须使用sessionStorage在一开始进入页面的时候就保存下, 那么在刷新页面的时候就可以得到了.

// 获取路由跳转后参数
export const getRouteQuery = (location, queryNames) => {
  const queries = {};
  if (location.query) {
    queryNames.forEach((name) => {
      queries[name] = location.query[name];
      window.sessionStorage[`${location.pathname}/${name}`] = queries[name];
    });
  } else {
    queryNames.forEach((name) => {
      queries[name] = window.sessionStorage[`${location.pathname}/${name}`];
    });
  }
  return queries;
};

在获取的地方, children.js中

componentDidMount() {
 Object.assign(this, getRouteQuery(this.props.location, ['id', 'name']));
使用的时候引入getRouteQuery
使用值的时候就是 this.id, this.name
}

params传参 id

上面的路径跳转配置, 修改成
params: ':id', // 只能接收一位参数

 <Link to={`/parentPath/children/${this.id}`}>跳转到</Link>

在children.js

通过this.props.match.params.id接收

componentDidMount() {
this.id = this.props.match.params.id;
}

以上三种, 第一种是最常用的

相关文章

  • vue路由跳转传递参数方式

    vue中点击页面跳转传参,可以通过设置params 与query params方式获取params传值方式this...

  • vue的传值方式

    1.query传值 在某处做路由跳转时,使用query传值的方式: 在页面中接受数据的方式: 2.params传值...

  • query与params的页面传值

    先简单记录页面传值, 还没完全弄懂其中的原理先配置路径跳转 params data传参 params传参 跳转页面...

  • 路由

    1.配置动态路由 1.params传值(req.params.参数) 2.query传值(req.query.参数)

  • vue 路由传值router打开新页面传值的几种方式

    同级传参的两种方式(推荐使用query方式,防止页面刷新传值数据丢失) 【1】.query穿参,或者params传...

  • vue param与query传参刷新数据消失处理

    1.params与query的区别:query传的值显示在地址栏里,无论路由那边设不设置 2.params传数据:...

  • VUE路由传参和接收

    params 与 query传参,query要用path来引入,params要用name来引入 //params传...

  • vue 跳转

    params 传参数,刷新页面会丢失参数,query不会。query 像GET , params 像POST

  • vue router知识点

    query和params传参的区别 一、区别 传参可以使用params和query两种方式; 使用params传参...

  • 路由传参 query 和 params

    vue路由传参分为两种情况: 一、query和params传参的区别: 1、query传参显示参数,params传...

网友评论

      本文标题:query与params的页面传值

      本文链接:https://www.haomeiwen.com/subject/rbgwqqtx.html