javascript - 如何使用单独的函数来动态组合 React 组件?
问题描述
我有一个函数可以遍历一个简单的树并在每一步调用函数来打印菜单:
renderMenuFx(menu, renderFx) {
renderFx.startMenu()
for (const entry of menu) {
renderFx.startEntry()
renderFx.renderEntry(entry.path.join(""), entry.title)
if (entry.menuEntries) {
this.renderMenuFx(entry.menuEntries, renderFx)
}
renderFx.endEntry()
}
renderFx.endMenu()
}
它在登录到控制台时工作:
this.renderMenuFx(tree, {
startMenu() { console.log('<ul>') },
endMenu() { console.log('</ul>') },
startEntry() { console.log('<li>') },
endEntry() { console.log('</li>') },
renderEntry(path, title) { console.log(`<a href="${path}">${title}</a>`) },
})
但是当我尝试在 React 中渲染它时它不会:
<div>
{
f.renderMenu(this.tree, {
startMenu() { return ( <ul> ) },
endMenu() { return ( </ul> ) },
startEntry() { return ( <li> ) },
endEntry() { return ( </li> ) },
renderEntry(path, title) { return ( <a href={path}>{title}</a> ) },
})
}
</div>
实际上,问题在于它无法编译,给出:
./src/components/Menu/MenuDyn.js
Syntax error: Unexpected token (141:37)
139 | f.renderMenu(this.tree, {
140 | startMenu() { return ( <ul> ) },
> 141 | endMenu() { return ( </ul> ) },
| ^
我显然做错了:处理这种情况的正确方法是什么?
解决方案
开始实验的简单示例:
在某些<Menu menu={someData} />
类组件中
render () {
return (
<ul>
{this.props.menu.map((entry) => (
<Entry key={entry.id} data={entry}></Entry>
))}
</ul>
)
}
渲染(功能)子组件:
const Entry = props => (
<li>
{props.data.title}
{props.data.menuEntries && (
<Menu menu={props.data.menuEntries} />
)}
</li>
)
推荐阅读
- javascript - Webstorm:无法运行简单的 nestjs 应用程序。错误:对装饰器的实验性支持是一项可能在未来版本中更改的功能
- mysql - MYSQL 拒绝远程连接,出现错误“ERROR 2003 (HY000)”和 TCP 错误 111
- cuda - NVCC 关于 [[deprecated]] 的警告:“属性不适用于任何实体”
- matlab - MATLAB R2020b:libmwlaunchermain.so:无法打开共享对象文件:运行编译后的二进制文件时没有这样的文件或目录
- python-3.x - pywinauto GUI自动化在Windows服务器上失败
- c++ - C++ Ubuntu 中的库和依赖项
- r - 将列表与循环一起添加
- java - Google Cloud Compute - 未为 VM-Instance 设置元数据
- html - 页脚右侧的空白区域
- r - 在惩罚logistc回归模型中提取特征重要性