【问题标题】:Issues with Reach router Nested routes到达路由器的问题嵌套路由
【发布时间】:2020-06-18 20:47:08
【问题描述】:

我在到达路由器嵌套路由时遇到问题,我正在尝试导航到 / 并呈现 page2,但是当路由更改为 // 时,我被困在同一页面的“/”主页上 //

<Appjs>
import React from "react";
import "./App.css";
import Homepage from "./Components/Homepage";
import Details from "./Components/Details";



function App() {
  return (
    <div>
      <Router>
        <Homepage path="/">
          <Details path="details" />
        </Homepage>
      </Router>
    </div>
  );
}

export default App;

import React, { Component, useEffect, useState } from "react";
import styled, { isStyledComponent } from "styled-components";
import NavLink from "./NavLink";
import { Link } from "@reach/router";

const Homepage = () => {
const [users, setUsers] = useState([]);

  return (
    <React.Fragment>
      <div className={"container"}>
        <Styleddiv>
          <h2>Select an Account</h2>
          <div style={{ padding: 0 }}>
            {Object.values(users).map((item) => (
              <Link to={`details/${item.name}`}>
                <img src={item.profilepicture} alt="Girl in a jacket"></img>
                <span>{item.name}</span>
              </Link>
            ))}
          </div>
        </Styleddiv>
      </div>
    </React.Fragment>
  );
};

export default Homepage;

在路由器内部构建路由时我是否遗漏了什么,请帮助我

所以在主页中,如果我点击任何链接,路线将更改为 /details,但详细信息页面无法呈现

https://codesandbox.io/s/billowing-hill-j5gmy?file=/src/Homepage.js

【问题讨论】:

标签: reactjs reach-router


【解决方案1】:

您是否错过了 App.js 文件中的 Router 导入?

import React from "react";
import { Router, Link } from "@reach/router";

import Homepage from "./Homepage";
import Details from "./Details";

export default function App() {
  return (
    <div>
      <nav>
        <Link to="/">Home</Link>
        <Link to="dashboard">Detail</Link>
      </nav>
      <Router>
        <Homepage path="/" />
        <Details path="dashboard" />
      </Router>
    </div>
  );
}

编辑:Code Sand Box

【讨论】:

    【解决方案2】:

    这就是我使用嵌套路由的方式

    Code sandbox

    为了嵌套路由,您需要将它们放置在路由的子组件中。

    使用 render 属性而不是 component,因为它会阻止内联功能组件在每次渲染时重新挂载,see explanation

    match 对象包含有关路由如何匹配 URL 的信息,因此我们可以使用 url 属性创建嵌套路由,该属性为我们提供 URL 的匹配部分 see explanation

    【讨论】:

    • 你给出的解决方案是关于react路由器,有没有类似的解释到达路由器?
    • 试试这个codesandbox.io/s/youthful-cloud-m6tbg?file=/src/Page1.jsx,同时确保你在主页组件上收到了道具并使用{props.children}进行渲染
    • 您提供的解决方案似乎有效,但是有什么方法可以根据路由呈现子组件,例如,假设 details 组件有三个子组件,我想在 /details 页面中呈现前两个子组件和在 /details/post 页面中渲染第三个孩子
    • 导入这两个组件并在细节中渲染它们,第三个将其保留为“帖子”的路径。你可以再看看解决方案,我已经更新了。
    • 是的,我能够达到预期的结果,但是子组件被包裹在一个 tabindex div 下,这弄乱了我的整个 css,试图找到解决它的方法,您的帮助至关重要,感谢它,谢谢
    猜你喜欢
    • 2019-01-06
    • 1970-01-01
    • 2021-08-11
    • 2011-03-18
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多