javascript - reactjs - 通过 json 动态渲染带有组件的路由
问题描述
我是新来的反应,通常在 javascript 中。
此外,我确实有一个 json 文件,我想获取 url 值并呈现具有该名称的组件。
{
"MTs": {
"MenuItems": {
"Main": {
"key": "1",
"url": "about",
"visible": true
},
"Add Status": {
"key": "2",
"url": "topics",
"visible": true
},
}
}
我的代码:
const [data, setData] = useState({ MTs: [] });
useEffect(() => {
fetch(props.role + ".json")
.then(function (response) {
// console.log(response);
return response.json();
})
.then(function (myJson) {
// console.log(myJson);
setData(myJson);
})
.catch((err) => {
console.log(err);
});
}, []);
var url = [];
var val = function (data) {
for (var key in data) {
if (data.hasOwnProperty(key)) {
for (var title in data[key].MenuItems) {
if (data[key].MenuItems[title].visible == true) {
url.push(
<Route
path={"/"+ data[key].MenuItems[title].url}
component={data[key].MenuItems[title].url}
/>
);
}
}
}
}
return url;
};
return <div>{val(data)}</div>;
};
它不渲染是因为它是一个数组并在组件名称中添加了双引号“”。
有没有办法或“更好的方法”来做到这一点?
预期结果
<Route
path="/about"
component={about}
/>
<Route
path="/topics"
component={topics}
/>
<Route path="/datagrid" component={etc} />
解决方案
试试这个将你的组件添加到这样的对象中
const Component = {
"about": <About />,
"topics": <Topics />
}
然后在循环中调用
<Route path={"/"+ data[key].MenuItems[title].url} component={Component[data[key].MenuItems[title].url]} />
推荐阅读
- python - 运行 JS 脚本的 Django 需要返回 Not Found 的 JSON(静态收集)
- c++ - 抑制从 cin 到 cout 的回声
- reactjs - React ComponentDidUpdate 'this' 未定义
- javafx - 如何在 KeyPressed 上更改节点的填充颜色时修复“Null PointerException”
- c - 在 C 中从 DMS 转换为 Lat Long
- authentication - 在我的网站中只允许“使用”google/facebook/twitter 登录是个好主意吗?
- kotlin - 我可以在 Kotlin 中获取对具有默认参数的函数的函数引用,作为无参数函数吗?
- authentication - 将 Kubernetes 连接到 AD
- android - 如何检查 Google Play 订单是否已退款?
- css - 为什么我的图标显示图像重复?