【问题标题】:How to use :params in React router如何在 React 路由器中使用 :params
【发布时间】:2020-09-08 16:13:43
【问题描述】:

react-router 在嵌套路由上出现问题。传递一个参数以适应任何后续链接,以便稍后在传递到 Route 的子组件中有条件地呈现

import React from "react";

import { Route } from "react-router-dom";

import CollectionsOverview from "../../components/collections-overview/collections-overview";
import CollectionPage from "../collection/collection";

const ShopPage = ({ match }) => {
  return (
    <div className="shop-page">
      <Route exact path={`${match.path}`} component={CollectionsOverview} />
      <Route path={`${match.path}/:collectionId`} component={CollectionPage} />
    </div>
  );
};
export default ShopPage;

import React from "react";
import "./collection.styles.scss";

const CollectionPage = ({ match }) => {
  return (
    <div className="collection-page">
      <h2>COLLECTION PAGE: {match.params.collectionId}</h2>
    </div>
  );
};

export default CollectionPage;

Route 2 在路由操作时从不渲染其组件

【问题讨论】:

    标签: javascript reactjs react-router


    【解决方案1】:

    您可以使用useParams。请检查此示例:

    import React from "react";
    import {BrowserRouter as Router,Switch,Route,Link,useParams} from "react-router-dom";
    
    export default function ParamsExample() {
      return (
        <Router>
          <div>
            <h2>Accounts</h2>
            <ul>
              <li>
                <Link to="/netflix">Netflix</Link>
              </li>
              <li>
                <Link to="/zillow-group">Zillow Group</Link>
              </li>
              <li>
                <Link to="/yahoo">Yahoo</Link>
              </li>
              <li>
                <Link to="/modus-create">Modus Create</Link>
              </li>
            </ul>
            <Switch>
              <Route path="/:id" children={<Child />} />
            </Switch>
          </div>
        </Router>
      );
    }
    
    function Child() {
      let { id } = useParams();
    
      return (
        <div>
          <h3>ID: {id}</h3>
        </div>
      );
    }
    

    Source

    【讨论】:

    • 访问参数似乎不是问题,因为我什至无法呈现 CollectionPage 组件。当我将地址栏中的路径更改为 /shop/randomString 时,它不会呈现.评估为 /shop/ 的 match.path 应该呈现 CollectionsOverview 并且 match.path/:randomString 应该呈现 collectionPage 组件,它们使 randomString 可以作为呈现组件中的 :params 访问。这是我正在努力实现的行为
    • 已修复!我意识到要在 2 条路由之间切换的组件在其父 Route 中使用 {exact} bool 呈现,因此无论何时更改路由,组件甚至都没有首先呈现以查看 URL 和渲染适当的子路由。取出修复它的确切布尔值。
    • 太棒了。谢谢
    猜你喜欢
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2018-09-10
    • 1970-01-01
    相关资源
    最近更新 更多