reactjs - 简单的反应功能组件不生成 HTML
问题描述
我试图找出创建生成简单 html 的功能组件的最佳方法 - 以这个 nav-links.js 文件为例:
export const navLinks = [
{
name: "home",
href: "/"
},
{
name: "subs",
href: "/subs"
}
];
我的组件尝试生成的 html 仅循环遍历每个链接,以生成带有列表标签和内部标签的无序列表。
问题出现在这个 nav-menu.js 文件中,其中的输出只是两个<ul></ul>
标签,里面什么都没有:
import React from "react";
import {
BrowserRouter as Router,
Switch,
Route,
Link
} from "react-router-dom";
import {navLinks} from "../util/nav-links";
export const NavMenu = () => {
const lis = () => (
{navLinks}.map(link => {
return (
<li>
<Link to={link.href} key={link.href}>{link.name}</Link>
</li>
)
})
)
return (
<div id="navbar">
<ul>
{lis}
</ul>
</div>
)
}
为什么在上面的组件中没有渲染?我在下面写了更多代码来解决它,尽管我想知道它是否可以更好地重构:
export const NavMenu = () => {
return (
<div id="navbar">
<ul>
{navLinks.map(link => {
return (
<li>
<Link to={link.href} key={link.href}>{link.name}</Link>
</li>
)
})}
</ul>
</div>
)
}
为什么第一次尝试不起作用,如何更好地重构?感谢您的帮助
解决方案
在您的第一个示例中不起作用,因为您const list = () => {..}
在代码的 JSX 部分的花括号内将其作为匿名函数传递而没有调用它。
如果你这样称呼它{list()}
:
return (
<div id="navbar">
<ul>
{lis()}
</ul>
</div>
)
这样可能会奏效。
或者您可以将列表存储在这样的变量中:
const lis = navLinks.map(link => {
return (
<li>
<Link to={link.href} key={link.href}>{link.name}</Link>
</li>
)
}
)
或者也像这样:
const lis = navLinks.map(link => (
<li>
<Link to={link.href} key={link.href}>{link.name}</Link>
</li>
)
)
)
推荐阅读
- javascript - 悬停时在容器/页面底部显示隐藏段落
- c# - 如何在多行上显示一串整数?
- python-3.x - 具有 dtypes 为“对象”的 column_names 列表
- python - 如何从块文件(revxxxxx.dat)中提取所有比特币地址
- python - 如何使用 Chalice 在 AWS Lambda 中设置“描述”
- powershell - PowerShell Out-String 不显示任何内容
- javascript - 如何从另一台服务器延迟加载模块?
- javascript - Vue.js 视频 this.$refs[something].play() 不起作用
- spring - 是否有任何需要长时间工作的弹簧响应库或解决方案
- javascript - 如何使用 vanilla javascript 通过 ajax 将多张照片上传到 Laravel 应用程序?