问题描述
对一个数组进行动态JSX拼接,目前是三条数据需要用Row包裹起来。
问题出现的环境背景及自己尝试过哪些方法
实现row和col的动态生成,我试过动态拼接,可是编译不过去.
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
const formItems = data.map((item) => (
<FormItem label={item.name} key={item.name}>
<Row>
{item.list.map((value) => <Col span={8}><Checkbox key={value.name}>{value.name}</Checkbox></Col>)}
</Row>
</FormItem>
));
你期待的结果是什么?实际看到的错误信息又是什么?
我希望的是<Row><Col/><Col/><Col/></Row>目前是<Row><Col/>...</Row>这样的结果
遇到同样的问题,而且想想其实也是常见的场景,经过半天周折做出的自己的解决方案,希望群策群力,提出更优的方案。
背景:对一个数组进行动态JSX拼接,目前是三条数据需要用Row包裹起来。
场景:原项目中对于这里的处理是穷举法,对所有的Col做写死三个一个Row,写出形式如下:
这样写的问题显而易见,变动成本很高,如果要在原有布局上中间插入一个新的Col,需要手动把该项后面的Col依次推后一位,大量的手工劳动(这样写代码真的是在搬砖),好处也有,就是代码直观易懂,新手也能上手改动,代码的格式就能直观映射出在屏幕上的布局。
分析:这里无非就是想对一个可能变动的数组进行三个一组显示一行,超出三个的换行显示
思路:
1、对数据分组
2、遍历分组后的数组生成Dom
3、在JSX中渲染显示
具体步骤:
1、数组如下
数组中的键仅保留标示性的属性,这样在增加新的数组项时可以保证最少改动,对于公共属性做数组遍历添加
对数组进行遍历,把三个放入一组
遍历分组后的数组生成Dom
渲染显示
总结:这种方案很明显还不够最优,并没有做到DRY(Don't repeat yourself),代码中还充斥着雷同部分,可以做进一步抽象优化,但是相比较原先穷举的方案,改良后对于数据变更的处理可以少一些手动改动,在变动较小的情况下,可以直接在数组需要插入的位置直接添加数据项即可,该程序会自动遍历数据项做三个一组分组进行显示
Ref:示例中使用到Antd的行列布局,即对空间的横向以Col分割,纵向按Row划分,所以才产生了这个场景,开发者可以针对自己需要的分组布局,对数据进行分组处理,做类似上面的显示布局