JS的history和location用法

一、什么是location

首先介绍的是location对象,location是BOM对象中最常用的一个对象之一,它提供了与当前窗口中加载的文档的有关的信息,还提供了一些导航的功能。说到这里,其实location是一个非常的特别的对象,因为window.location===document.location.另外location对解析URL非常的有帮助。

location一些常见属性:

  • location.hostname - 返回 web 主机的域名
  • location.pathname - 返回当前页面的路径和文件名
  • location.port - 返回 web 主机的端口
  • location.protocol - 返回所使用的 web 协议
  • location.href - 返回当前页面URL

history一些常见的属性

  • history.length - 返回当前标签页历史记录长度

  • history.back() - 后退(相当于点击浏览器后退按钮)

  • history.forward() - 前进(相当于点击浏览器前进按钮)

  • history.go() - 前进或者后退(参数为负数后退,正数前进,0表示刷新当前页面)

react通过history.location.state来携带参数

一.state格式
history.push(path, [state])

<Redirect to={{pathname: '/xxx', state: {} }}

二.实际操作
1.用history.push方法携带state参数

 history.push('/login', { from: history.location.pathname })


2.用Redirect里的to属性携带state参数

<Redirect to={{pathname: '/login',state: { from: history.location.pathname }}}/>


3.在login页面查看传过来的state参数

import { useHistory } from 'react-router'
const Login = () => {
  const history = useHistory()
  console.log(history, 'history')
}


 4.跳转回原页面
 

 history.replace(history.location.state.from || '/home')

项目里面,不让用push : 重定向到登录,别用push,push会有记录。所以查了一下,用replace代替push。

用history.push,和history.go或者replace其他方式去改变当前的location有什么特别的区别:

history.push 这个方法会向history栈里面添加一条新记录,这个时候用户点击浏览器的回退按钮可以回到之前的路径。

history.go 这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,类似 window.history.go(n)

history.replace 跟 history.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。

history.push和history.replace场景:

点击登录,进入页面,再随便点击一个页面。如果是push,点击回退,会回到登录页。但是replace,就回到上次点击的页面,不会回到登录页。(测试的时候重新开一个页面)


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 HTML 文件,包含了使用 history 对象进行前进后退跳转的代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>使用history对象的常用方法完成前进后退跳转</title> <style> body { font-family: Arial, sans-serif; font-size: 16px; line-height: 1.5; margin: 0; padding: 0; } .container { max-width: 800px; margin: 0 auto; padding: 20px; } button { padding: 10px 20px; background-color: #007bff; color: #fff; border: none; border-radius: 3px; cursor: pointer; font-size: 16px; margin-right: 10px; } </style> </head> <body> <div class="container"> <h1>使用history对象的常用方法完成前进后退跳转</h1> <p>当前页面的 URL 为:<code id="current-url"></code></p> <p> <button id="back-btn">后退一页</button> <button id="forward-btn">前进一页</button> <button id="go-btn">跳转到前两页</button> </p> </div> <script> // 获取当前页面的 URL,并显示在页面上 var currentUrl = window.location.href; document.getElementById('current-url').textContent = currentUrl; // 给后退按钮绑定事件 document.getElementById('back-btn').addEventListener('click', function () { history.back(); }); // 给前进按钮绑定事件 document.getElementById('forward-btn').addEventListener('click', function () { history.forward(); }); // 给跳转按钮绑定事件 document.getElementById('go-btn').addEventListener('click', function () { history.go(-2); // 跳转到前两页 }); </script> </body> </html> ``` 该 HTML 文件中使用了一些 CSS 样式,使页面看起来更加美观。同时,使用了 JavaScript 代码监听按钮的点击事件,并使用 history 对象进行前进后退跳转。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值