Да, вы можете использовать useHistory
& useLocation
хуки из response-router:
import React, { useState, useEffect } from 'react'
import { useHistory, useLocation } from 'react-router-dom'
export default function Foo() {
const [error, setError] = useState('')
const location = useLocation()
const history = useHistory()
useEffect(() => {
const queryParams = new URLSearchParams(location.search)
if (queryParams.has('error')) {
setError('There was a problem.')
queryParams.delete('error')
history.replace({
search: queryParams.toString(),
})
}
}, [])
return (
<>Component</>
)
}
As useHistory()
возвращает history объект, который имеет функцию replace
, которая может использоваться для замены текущей записи в стеке истории.
И useLocation()
возвращает location объект, который имеет свойство search
содержащую строку запроса URL, например ?error=occurred&foo=bar"
, которую можно преобразовать в объект с помощью URLSearchParams API (который не поддерживается в IE).