Skip to content

Why is it designed as below? it will cause history.replaceState method to be called #3447

Open
@wxwzl

Description

Version

3.4.9

Reproduction link

https://vesaas.com/?a=1&b=2&a=2

Steps to reproduce

input https://vesaas.com/?a=1&b=2&a=2 into webBroswer . then it becomes to https://vesaas.com/?a=1&a=2&b=2

What is expected?

do not trigger history.replaceState called

What is actually happening?

history.replaceState was called.


src/history/html5.js
ensureURL (push?: boolean) { if (getLocation(this.base) !== this.current.fullPath) { const current = cleanPath(this.base this.current.fullPath) push ? pushState(current) : replaceState(current) } }

src/util/query.js
`function parseQuery (query: string): Dictionary {
const res = {}

query = query.trim().replace(/^(?|#|&)/, '')

if (!query) {
return res
}

query.split('&').forEach(param => {
const parts = param.replace(/\ /g, ' ').split('=')
const key = decode(parts.shift())
const val = parts.length > 0
? decode(parts.join('='))
: null

if (res[key] === undefined) {
  res[key] = val
} else if (Array.isArray(res[key])) {
  res[key].push(val)
} else {
  res[key] = [res[key], val]
}

})

return res
}`

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions