我在React中使用@reach/router
。我使用必需的道具创建了路线组件。在安装应用程序但路由未激活时,我收到prop类型警告。
此简单示例摘自@reach/router
docs。
import React from "react";
import { render } from 'react-dom';
import PropTypes from 'prop-types';
import { Router, Link } from "@reach/router";
const App = ({ children }) => (
<div>
<nav>
<Link to="/">Home</Link>{" "}
<Link to="users/123">Bob</Link>{" "}
<Link to="users/abc">Sally</Link>
</nav>
{children}
</div>
);
const User = props => <h2>{props.userId}</h2>;
User.propTypes = {
userId: PropTypes.string.isRequired
};
const Home = () => (
<div>
<h2>Welcome!</h2>
<p>
Select a user, their ID will be parsed from the URL and passed to the User
component
</p>
</div>
);
render(
<Router>
<App path="/">
<Home path="/" />
<User path="users/:userId" />
</App>
</Router>,
document.getElementById("root")
);
该代码呈现Home
组件而不是User
组件。尽管如此,我仍然可以在控制台中看到以下错误:
Failed prop type: The prop `userId` is marked as required in `User`, but its value is `undefined`.
除非呈现了组件,否则我不会期望看到此错误。
有办法防止这种情况发生吗?
我想使用prop-types
指定动态细分中的道具是必需的,但我不想看到该道具警告。
答案 0 :(得分:1)
您应该在用户组件内部的路径前面放置/
,如下所示:
<User path="users/:userId" />
<〜您的代码
<User path="/users/:userId" />
<〜您的解决方案
编辑:
您想对链接做同样的事情
<Link to="users/abc">Sally</Link>
<〜您的代码
<Link to="/users/abc">Sally</Link>
<〜您的解决方案