【发布时间】:2019-05-10 22:44:53
【问题描述】:
问题:尝试在我的本地环境中实现反应路由器查询参数示例。下面的代码来自他们的网站。
import React from "react";
import { BrowserRouter as Router, Link } from "react-router-dom";
function ParamsExample({ location }) {
let params = new URLSearchParams(location.search);
return (
<Router>
<div>
<p>
React Router does not have any opinions about how your parse URL query
strings. Some applications use simple key=value query strings, but
others embed arrays and objects in the query string. So it's up to you
to parse the search string yourself.
</p>
<p>
In modern browsers that support{" "}
<a href="https://developer.mozilla.org/en-US/docs/Web/API/URL">
the URL API
</a>
, you can instantiate a <code>URLSearchParams</code> object from{" "}
<code>location.search</code> and use that.
</p>
<p>
In{" "}
<a href="https://caniuse.com/#feat=url">
browsers that do not support the URL API (read: IE)
</a>{" "}
you can use a 3rd party library such as{" "}
<a href="https://github.com/sindresorhus/query-string">query-string</a>.
</p>
<div>
<h2>Accounts</h2>
<ul>
<li>
<Link to={{ pathname: "/account", search: "?name=netflix" }}>
Netflix
</Link>
</li>
<li>
<Link to={{ pathname: "/account", search: "?name=zillow-group" }}>
Zillow Group
</Link>
</li>
<li>
<Link to={{ pathname: "/account", search: "?name=yahoo" }}>
Yahoo
</Link>
</li>
<li>
<Link to={{ pathname: "/account", search: "?name=modus-create" }}>
Modus Create
</Link>
</li>
</ul>
<Child name={params.get("name")} />
</div>
</div>
</Router>
);
}
function Child({ name }) {
return (
<div>
{name ? (
<h3>
The <code>name</code> in the query string is "{name}"
</h3>
) : (
<h3>There is no name in the query string</h3>
)}
</div>
);
}
export default ParamsExample;
渲染时我收到以下错误消息 TypeError: Cannot read property 'search' of undefined
这很简单,但是当我在 console 中执行 location.search 时,我得到以下输出 "?name=zillow-group"
据说location.search 是一个有效的属性,但不确定为什么 react 没有看到它。
【问题讨论】:
-
你能在函数 paramsExample 中试试 console.log(location)。并刷新组件。因此,我们可以检查是否从刷新的初始时间开始获取搜索属性。请告诉我结果
标签: javascript reactjs ecmascript-6 react-router