如何在“到达路线”组件中使用所需的道具

时间:2019-10-22 14:59:59

标签: reactjs react-proptypes reach-router

我在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指定动态细分中的道具是必需的,但我不想看到该道具警告。

1 个答案:

答案 0 :(得分:1)

您应该在用户组件内部的路径前面放置/,如下所示:

<User path="users/:userId" /> <〜您的代码

<User path="/users/:userId" /> <〜您的解决方案

编辑: 您想对链接做同样的事情 <Link to="users/abc">Sally</Link> <〜您的代码

<Link to="/users/abc">Sally</Link> <〜您的解决方案