如何将组件名称从另一个组件的对象传递到React Router Dom中的Route?

DᴀʀᴛʜVᴀᴅᴇʀ

我正在学习React,并在遵循一些教程的同时,我想回过头来学习如何使它变干,因此给出以下app.js

app.js

import React from 'react'
import './App.css'

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

// Components
import Navbar from './components/Navbar'
import { Home, Reports, Products, Team, Messages, Support } from './pages'

function App() {
  return (
    <Router>
      <Navbar />
      <Switch>
        <Route path="/" exact component={Home} />
        <Route path="/reports" exact component={Reports} />
        <Route path="/products" exact component={Products} />
        <Route path="/team" exact component={Team} />
        <Route path="/messages" exact component={Messages} />
        <Route path="/support" exact component={Support} />
      </Switch>
    </Router>
  )
}

export default App

我注意到该路线也被复制到声明侧边栏的位置title

SidebarData.js:

import React from 'react'

import * as FaIcons from 'react-icons/fa'
import * as AiIcons from 'react-icons/ai'
import * as IoIcons from 'react-icons/io'

const SidebarData = [
  { title: 'Home', path: '/', icon: <AiIcons.AiFillHome />, cName: 'nav-text' },
  { title: 'Reports', path: '/reports', icon: <IoIcons.IoIosPaper />, cName: 'nav-text' },
  { title: 'Products', path: '/products', icon: <FaIcons.FaCartPlus />, cName: 'nav-text' },
  { title: 'Team', path: '/team', icon: <IoIcons.IoMdPeople />, cName: 'nav-text' },
  { title: 'Messages', path: '/messages', icon: <FaIcons.FaEnvelopeOpenText />, cName: 'nav-text' },
  { title: 'Support', path: '/support', icon: <IoIcons.IoMdHelpCircle />, cName: 'nav-text' },
]

export default SidebarData

鉴于代码已复制,我一直在尝试通过以下方式映射SidebarData到Route的组件声明中的组件:

尝试1:

import React from 'react'
import './App.css'

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

// Components
import Navbar from './components/Navbar'
import SidebarData from './components/SidebarData'
import { Home, Reports, Products, Team, Messages, Support } from './pages'

function App() {
  return (
    <Router>
      <Navbar />
      <Switch>
        {SidebarData.map(({ path, title }, i) => (
          <Route key={i} path={path} exact component={title} />
        ))}
      </Switch>
    </Router>
  )
}

export default App

但我收到一个错误,并注意到在调用组件时它不起作用,并且在VSC中,我的组件引入了:

import { Home, Reports, Products, Team, Messages, Support } from './pages'

变灰了。

尝试2:

我认为也许可以SidebarData通过在其中引入组件来建立参考

SidebarData.js:

import React from 'react'

import * as FaIcons from 'react-icons/fa'
import * as AiIcons from 'react-icons/ai'
import * as IoIcons from 'react-icons/io'

import { Home, Reports, Products, Team, Messages, Support } from '../pages'

const SidebarData = [
  { title: 'Home', comp: <Home />, path: '/', icon: <AiIcons.AiFillHome />, cName: 'nav-text' },
  {
    title: 'Reports',
    comp: <Reports />,
    path: '/reports',
    icon: <IoIcons.IoIosPaper />,
    cName: 'nav-text',
  },
  {
    title: 'Products',
    comp: <Products />,
    path: '/products',
    icon: <FaIcons.FaCartPlus />,
    cName: 'nav-text',
  },
  { title: 'Team', comp: <Team />, path: '/team', icon: <IoIcons.IoMdPeople />, cName: 'nav-text' },
  {
    title: 'Messages',
    comp: <Messages />,
    path: '/messages',
    icon: <FaIcons.FaEnvelopeOpenText />,
    cName: 'nav-text',
  },
  {
    title: 'Support',
    comp: <Support />,
    path: '/support',
    icon: <IoIcons.IoMdHelpCircle />,
    cName: 'nav-text',
  },
]

export default SidebarData

然后在app.js中更改地图

{SidebarData.map(({ path, comp }, i) => (
          <Route key={i} path={path} exact component={comp} />
        ))}

但这对以下错误也不起作用:

错误:元素类型无效:期望使用字符串(对于内置组件)或类/函数(对于复合组件),但得到了:对象。

检查的渲染方法Router.Consumer

我试图对此进行研究,但我认为我的失败是由于不知道在React中将其称为什么。阅读以下内容无效:

通过SidebarData映射时,如何将组件SidebarData中的引用标题转换为Route中的组件引用?

拉梅什·雷迪(Ramesh Reddy)

好问题,请尝试以下操作:

const SidebarData = [
  // ...   
  {
    title: 'Reports',
    comp: Reports,
    path: '/reports',
    icon: <IoIcons.IoIosPaper />,
    cName: 'nav-text',
  },
  {
    title: 'Products',
    comp: Products,
    path: '/products',
    icon: <FaIcons.FaCartPlus />,
    cName: 'nav-text',
  },
  ...

以及要映射的位置,请使用以下comp属性:

{
  SidebarData.map(({ path, comp }, i) => (
    <Route key={i} path={path} exact component={comp} />
  ));
}

而且由于该comp属性引用了组件,所以我认为最好像这样大写Comp

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用react-router-dom(<Route>)将var从->传递到React中的功能组件

来自分类Dev

React-如何将API数据从一个组件传递到另一个js文件中的另一个组件?

来自分类Dev

如何将对象从数组渲染到React中的另一个组件?

来自分类Dev

如何将状态className变量传递给React中的另一个组件

来自分类Dev

如何将表单输入字段传递给 React 中的另一个组件?

来自分类Dev

如何将组件作为道具传递给 react js 中的另一个组件?

来自分类Dev

如何将对象从一个组件传递到另一个组件以在angular2中建立数据模型?

来自分类Dev

ReactJS:如何通过对象中的道具将函数名称传递给另一个组件

来自分类Dev

如何将状态传递给不同文件中的一个组件到另一个组件

来自分类Dev

如何将表单组数据传递到另一个组件中的“提交”按钮(Angular 7)

来自分类Dev

Angular 6 如何将一个组件中的数组传递给另一个组件

来自分类Dev

将一个组件传递到props数组中的另一个组件

来自分类Dev

将此this.props.children传递到react-router中的另一个文件

来自分类Dev

如何将翻译后的字符串传递给react-jhipster中的另一个组件?

来自分类Dev

将道具传递到React.js中的另一个组件

来自分类Dev

如何将路由器中的组件状态传递给另一个路由器组件

来自分类Dev

如何在不使用 url 参数的情况下通过 react-router-dom 将数据从一个视图传递到另一个视图?

来自分类Dev

在Angular中,当组件不是父/子组件时,如何将值从一个组件传递到另一组件?

来自分类Dev

如何通过语义UI的扩充将props从react-router-dom传递到Link组件?

来自分类Dev

React-Native:如何将组件中的项目与另一个组件中的项目绑定?

来自分类Dev

如何将值onClick从不同组件分配给React中的另一个组件

来自分类Dev

如何将一个React-Admin组件嵌入另一个组件中;多个管理组件

来自分类Dev

Angular 5 将数据从一个组件中的表传递到另一个组件

来自分类Dev

如何将组件回调传递给react-router中的children元素?

来自分类Dev

当转换发生时使用 router.push 将 props 从一个组件传递到另一个组件

来自分类Dev

如何将HashSet对象从一个片段传递到android中的另一个片段

来自分类Dev

如何将字符串作为函数传递给react-router-dom Route?

来自分类Dev

我如何使用Link和Router在响应中将道具从一个组件传递到另一个组件

来自分类Dev

将数据传递到VueJS中的另一个组件

Related 相关文章

  1. 1

    使用react-router-dom(<Route>)将var从->传递到React中的功能组件

  2. 2

    React-如何将API数据从一个组件传递到另一个js文件中的另一个组件?

  3. 3

    如何将对象从数组渲染到React中的另一个组件?

  4. 4

    如何将状态className变量传递给React中的另一个组件

  5. 5

    如何将表单输入字段传递给 React 中的另一个组件?

  6. 6

    如何将组件作为道具传递给 react js 中的另一个组件?

  7. 7

    如何将对象从一个组件传递到另一个组件以在angular2中建立数据模型?

  8. 8

    ReactJS:如何通过对象中的道具将函数名称传递给另一个组件

  9. 9

    如何将状态传递给不同文件中的一个组件到另一个组件

  10. 10

    如何将表单组数据传递到另一个组件中的“提交”按钮(Angular 7)

  11. 11

    Angular 6 如何将一个组件中的数组传递给另一个组件

  12. 12

    将一个组件传递到props数组中的另一个组件

  13. 13

    将此this.props.children传递到react-router中的另一个文件

  14. 14

    如何将翻译后的字符串传递给react-jhipster中的另一个组件?

  15. 15

    将道具传递到React.js中的另一个组件

  16. 16

    如何将路由器中的组件状态传递给另一个路由器组件

  17. 17

    如何在不使用 url 参数的情况下通过 react-router-dom 将数据从一个视图传递到另一个视图?

  18. 18

    在Angular中,当组件不是父/子组件时,如何将值从一个组件传递到另一组件?

  19. 19

    如何通过语义UI的扩充将props从react-router-dom传递到Link组件?

  20. 20

    React-Native:如何将组件中的项目与另一个组件中的项目绑定?

  21. 21

    如何将值onClick从不同组件分配给React中的另一个组件

  22. 22

    如何将一个React-Admin组件嵌入另一个组件中;多个管理组件

  23. 23

    Angular 5 将数据从一个组件中的表传递到另一个组件

  24. 24

    如何将组件回调传递给react-router中的children元素?

  25. 25

    当转换发生时使用 router.push 将 props 从一个组件传递到另一个组件

  26. 26

    如何将HashSet对象从一个片段传递到android中的另一个片段

  27. 27

    如何将字符串作为函数传递给react-router-dom Route?

  28. 28

    我如何使用Link和Router在响应中将道具从一个组件传递到另一个组件

  29. 29

    将数据传递到VueJS中的另一个组件

热门标签

归档