javascript - 使用组件 react 路由(PageRenderer)

标签 javascript reactjs routes react-router

我正在尝试在 React 中进行基本路由。通常我所做的,以及我稍后会提到的,是使用 element={<some page>} .但目前我想学习和试验还有哪些其他选项,所以我遇到了插入函数的组件。我遵循了一个教程,并且做了完全相同的操作,只是教程使用了较旧版本的路由器 dom,因此它不使用路由。
这是代码:
应用程序.js:

import {BrowserRouter as Router, Routes, Route} from 'react-router-dom'

import Register from './pages/register';
import Login from './pages/login';
import PageRender from './PageRender';

function App() {
  return (
    <Router>
      <input type='checkbox' id='theme'/>
      <div className="App">
        <div className="main"> 
        <Routes> 
          <Route exact path="/:page" component={PageRender}/>
          <Route exact path="/:page/:id" component={PageRender}/>
        </Routes>
        </div>
      </div>
    </Router>
  );
}

export default App;
PageRender.js:
import React from 'react'
import { useParams } from 'react-router'
import NotFound from './components/NotFound'

const generatePage = (pageName) => {
    const component = () => require(`./pages/${pageName}`).default

    try {
        return React.createElement(component())
    } catch (err) {
        return <NotFound />
    }
}


const PageRender = () => {
    const {page, id} = useParams()
    let pageName = "";

    if(id){
        pageName = `${page}/[id]`
    }else{
        pageName = `${page}`
    }

    return generatePage(pageName)
}

export default PageRender
登录和注册 js 只是显示登录或注册的基本箭头功能(还没有涉及到那部分)。我想要做的是当我输入网址时,例如:http://localhost:3000/register,它会将我发送到注册页面,如果我输入错误的路径,它会将我发送到“未找到”页面.但遗憾的是,它不起作用。我知道如果我只是这样做,我可以解决这个问题:
<Route exact path="/login" element={<Login/>}/>
这种方法有效,但目前我正在学习中,我很好奇为什么这种方法不起作用。

最佳答案

我能够让您的代码在 react-router-dom 中工作v5,诀窍是在 App 中导入组件一次所以它们被构建/编译。 PageRender组件按原样工作。
RRDv5

import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";

import './pages/register';
import "./pages/login";
import PageRender from "./PageRender";

export default function App() {
  return (
    <Router>
      <input type="checkbox" id="theme" />
      <div className="App">
        <div className="main">
          <Switch>
            <Route path="/:page/:id" component={PageRender} />
            <Route path="/:page" component={PageRender} />
          </Switch>
        </div>
      </div>
    </Router>
  );
}
RRDv6 - 交换 Switch Routes 的组件组件,并切换到使用 element Prop 而不是 component渲染 PageRender 的 Prop JSX 组件。
import { BrowserRouter as Router, Routes, Route, Link } from "react-router-dom";

import './pages/register';
import "./pages/login";
import PageRender from "./PageRender";

export default function App() {
  return (
    <Router>
      <input type="checkbox" id="theme" />
      <div className="App">
        <div className="main">
          <Routes>
            <Route path="/:page/:id" element={<PageRender />} />
            <Route path="/:page" element={<PageRender />} />
          </Routes>
        </div>
      </div>
    </Router>
  );
}
Edit react-routing-using-components-pagerenderer

关于javascript - 使用组件 react 路由(PageRenderer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70683942/

相关文章:

javascript - 跨站点脚本 Iframe 权限被拒绝问题

javascript - 可以使用 SignalR 向特定用户发送消息吗?

javascript - LoggedIn undefined in everyauth

javascript - 更新 React Table 以在提交后不选择任何行

javascript - 使用 Twig 和 Symfony2 在 javascript 中生成路由

javascript - C# 字符串排序 '@' 与 Javascript 的符号差异

reactjs - 'docker-compose run app yarn add raven-js'未在npm_modules中安装软件包

reactjs - Material-ui v.1 - 使用主题定义组件的背景

c# - 来自 ASP.NET MVC CMS 数据库的动态路由

c# - MVC3 路由问题