在react-router
v5中,我能够使用
let keyword = history.location.search
但是在react-router
V6中我得到了一个错误,那么该代码的替代品是什么呢?
编辑:顺便说一下,我不太擅长路由,目前正在从v5转换代码.我想知道在v5中关键字应该返回什么?我现在所处的道路?
在react-router
v5中,我能够使用
let keyword = history.location.search
但是在react-router
V6中我得到了一个错误,那么该代码的替代品是什么呢?
编辑:顺便说一下,我不太擅长路由,目前正在从v5转换代码.我想知道在v5中关键字应该返回什么?我现在所处的道路?
在103的情况下,您应该从location
对象而不是history
对象访问search
值.
历史对象是可变的.因此,建议访问 来自渲染props
<Route>
的location
,而不是来自history.location
.这确保了你对react 的假设是 在生命周期挂钩中进行更正.
如果教程显示使用history.location.search
,我不会给它太多权重.
然而,在react-router-dom@6
中,不再有route props个,即没有history
、location
或match
个props .相反,您可以通过Reaction挂钩访问所有这些内容.请注意,history
对象也不再直接expose 给组件,而是通过useNavigate
挂钩由navigate
函数取代.
为了访问queryStringRRDv6引入了一个新的useSearchParams
钩子.
给定URL "/somepath?someQueryParam=123"
import { useSearchParams } from 'react-router-dom';
...
const [searchParams, setSearchParams] = useSearchParams();
const someQueryParam = searchParams.get("someQueryParam"); // 123
编辑:顺便说一句,我不太擅长路由,目前正在转换代码 从v5开始,我想知道关键字在v5中应该返回什么?这条路是 我目前在吗?
location.search
是一个字符串,因此您可以手动处理该字符串,或者创建URLSearchParams
对象.
判断RRDv5 Query Parameters demo
他们创建了一个定制的useQueryHook
:
function useQuery() {
const { search } = useLocation();
return React.useMemo(() => new URLSearchParams(search), [search]);
}
然后使用getter访问命名查询参数:
let query = useQuery();
...
const name = query.get("name");