javascript - 如何在反应中将给定数量的列作为div元素附加到另一个div元素上
问题描述
我目前正在尝试使用 jQuery 中以前非常简单的原理在 React 中呈现一种带有 div 元素的网格。
使用 jQuery,像这样快速简单:
const $field = $('#field');
for(let row = 0; row < 5; row++) {
const $row = $('<div>').addClass('row');
for(let col = 0; col < 10; col++) {
const $col = $('div').addClass('col');
$row.append($col);
}
$field.apped($row);
}
完毕
在 React 我现在已经尝试了几种方法,但没有成功
首先是真正的基础:
const rows = [], cols = [];
for(let x = 0; x < 6; x++) {
let row = React.createElement(
"div", {className: "row"}
);
rows.push(row);
}
for(let i = 0; i < 7; i++) {
let col = React.createElement(
"div", {className: "col"}
);
cols.push(col);
}
class Grid extends React.Component {
constructor(props) {
super(props);
};
render() {
return (
<>
<h1>Some Header</h1>
<div id="board">
{rows}
{cols}
</div>
</>
)
}
}
当然,这里的问题是 cols 不与行嵌套
由于不幸的是 React 中不存在 innerHTML 函数——我理解存在安全问题的提示——我首先尝试使用方法将元素与状态嵌套。没有成功,坦率地说,在我看来,如此努力地做如此简单的事情(甚至使用 vanilla JS)似乎是倒退了一步。
我仍然相信这样的事情必须要简单得多——即使在 React 中也是如此。所以尝试了这样的事情:
...
class Grid extends React.Component {
constructor(props) {
super(props);
};
render() {
return (
<>
<h1>Some Header</h1>
<div id="board">
{rows.map((el, i) => {
return <div className="row" dangerouslySetInnerHTML={{__html: cols.forEach(el => {return el}) }} />;
})}
</div>
</>
)
}
}
不幸的是,没有成功,只有行 div 被渲染。不幸的是,下一次尝试也不是,而是更接近:
...
class Grid extends React.Component {
constructor(props) {
super(props);
};
render() {
return (
<>
<h1>Some Header</h1>
<div id="board">
{rows.map((el, i) => {
return <div dangerouslySetInnerHTML={{__html: cols}} />;
})}
</div>
</>
)
}
}
输出:
<div id="field">
<div>
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],
[object Object]
</div>
<div> ... etc
使用该映射函数中的“i”-索引迭代器来遍历 Object.keys 或 Object.values 并带有一些额外的逻辑也不起作用,现在我已经没有想法了,也找不到任何合适的提示片刻。
有谁知道这样做的最终解决方案?
非常感谢
解决方案
了解何时在实际 JSX 环境中使用 HTML:
...
for(let i = 0; i < 7; i++) {
let col = "<div class='col'></div>";
cols.push(col);
}
class Grid extends React.Component {
constructor(props) {
super(props);
};
render() {
return (
<>
<h1>Some header</h1>
<div id="board">
{rows.map((el, i) => {
return <div className="row" dangerouslySetInnerHTML={{__html: cols.join(" ")}} />;
})}
</div>
</>
)
}
...
作品
推荐阅读
- c# - Jose-JWT 中的公钥加密
- r - 使用 readr 读取文本文件,其中引号结束行
- r - R 和 GIS:循环保存文件时遇到问题
- java - 速度 2 不会设置属性
- android - LocationServices 运行时错误
- php - PivotModel 在 laravel 中扩展了 Pivot 如何获取 PivotModel 关系数据
- facebook-login - Facebook 登录 Api 错误,甚至域允许加密 SSL - 不安全登录
- asp.net-mvc - Razor 页面上的 kendo UI 异步上传返回 404
- sql-server - 恢复备份数据库(.bak 文件) - 错误
- python-3.x - 如何在被访问时使用 python 3 从 docx 获取