从对象渲染 React 组件
Rendering React Components from an Object
假设我有以下将组件作为条目的对象:
import Comp1 from './Comp1'
import Comp2 from './Comp2'
import Comp3 from './Comp3'
const components = { 'comp1' : Comp1, 'comp2' : Comp2, 'comp3' : Comp3 }
我想用这个对象来渲染这些组件:
Object.keys(components).map((key, i) => (
<div key={i}>
<components[key] /> // this does not work
</div>
))}
实际上我正在尝试使用配置对象呈现路由:
export const routes = {
'home' : {
path: '/',
component: Home,
exact: true,
access: {
anonymous: true
},
navigation: {
label: 'Home',
icon: 'fa-home',
show: true
}
},
.....
const Routes = () => (
<div>
{Object.keys(routes).map((k, i) => (
<Route
key={i}
exact={routes[k].exact}
path={routes[k].path}
render={() =>
!routes[k].access.anonymous ? (
<Redirect to="/login"/>
) : (
<routes[k] /> // nope
)
}
/>
))}
</div>
)
我在想 <components[key] />
是 JSX 而 React 不需要使用 JSX,所以也许解决方案是 不使用 JSX,使用标准渲染这些组件JS。虽然我不知道该怎么做。
routes[k]
不是 React 组件,routes[k].component
是。此外,由于您只对使用 Object.values
而不是 Object.keys
.
的值感兴趣
Object.values(routes).map((route, i) => (
<Route key={i}
exact={route.exact}
path={route.path}
render={() =>
!route.access.anonymous ? (
<Redirect to="/login"/>
) : (
<route.component />
)
}
/>
))
假设我有以下将组件作为条目的对象:
import Comp1 from './Comp1'
import Comp2 from './Comp2'
import Comp3 from './Comp3'
const components = { 'comp1' : Comp1, 'comp2' : Comp2, 'comp3' : Comp3 }
我想用这个对象来渲染这些组件:
Object.keys(components).map((key, i) => (
<div key={i}>
<components[key] /> // this does not work
</div>
))}
实际上我正在尝试使用配置对象呈现路由:
export const routes = {
'home' : {
path: '/',
component: Home,
exact: true,
access: {
anonymous: true
},
navigation: {
label: 'Home',
icon: 'fa-home',
show: true
}
},
.....
const Routes = () => (
<div>
{Object.keys(routes).map((k, i) => (
<Route
key={i}
exact={routes[k].exact}
path={routes[k].path}
render={() =>
!routes[k].access.anonymous ? (
<Redirect to="/login"/>
) : (
<routes[k] /> // nope
)
}
/>
))}
</div>
)
我在想 <components[key] />
是 JSX 而 React 不需要使用 JSX,所以也许解决方案是 不使用 JSX,使用标准渲染这些组件JS。虽然我不知道该怎么做。
routes[k]
不是 React 组件,routes[k].component
是。此外,由于您只对使用 Object.values
而不是 Object.keys
.
Object.values(routes).map((route, i) => (
<Route key={i}
exact={route.exact}
path={route.path}
render={() =>
!route.access.anonymous ? (
<Redirect to="/login"/>
) : (
<route.component />
)
}
/>
))