我正在尝试创建可以在本质上重用的表组件。根据从父组件通过道具传递给它的数据,它可以包含任意数量的列。
为了实现这一点,我创建了如下单独的函数来填充JSX元素。
renderColumn
:它将列名传递作为父字符串数组的道具。renderBody
:这将填充每行的body和TableRow。它将调用renderCell
函数,该函数将返回要推入renderBody
方法中的JSX元素数组。renderCell
:此方法使用for
在
中迭代行对象的每个属性,创建TableCell元素,并将其推送到数组中,返回理想情况下包含JSX元素的数组但是,我无法在renderBody
方法中从renderCell
方法推送JSX元素返回。
我确实尝试过将它从renderCell
方法返回的元素记录到控制台中,该方法似乎只是JSX元素。
src\components\Table\index.js
import Table from '@material-ui/core/Table';
import TableBody from '@material-ui/core/TableBody';
import TableCell from '@material-ui/core/TableCell';
import TableContainer from '@material-ui/core/TableContainer';
import TableRow from '@material-ui/core/TableRow';
renderCell = (row) => {
var cell = [];
var i = 1;
for (var prop in row) {
if (row.hasOwnProperty(prop)) {
cell.push(<TableCell key={i} align="right">{ row[prop] }</TableCell>);
i++;
}
}
console.log(cell)
return cell;
}
renderBody = () => {
let rows = this.props.rows
return (
<TableBody>
{rows.map( row => {
<TableRow key={row.key}>
{ this.renderCell(row) } // How do I render Array of JSX Element?
</TableRow>
})}
</TableBody>
)
}
render() {
return (
<TableContainer>
<Table aria-label="simple table">
{ this.renderColumn() }
{ this.renderBody() }
</Table>
</TableContainer>
);
}
下面是来自renderCell
函数的console.log
[
{
$$typeof: Symbol(react.element)
key: "1"
props: {align: 'right', children: 1}
ref: null
type: {$$typeof: Symbol(react.forward_ref), propTypes: {…}, Naked: {…}, options: {…}, render: ƒ, …}
_owner: FiberNode {tag: 1, key: null, stateNode: Table, elementType: ƒ, type: ƒ, …}
_store: {validated: false}
_self: Table {props: {…}, context: {…}, refs: {…}, updater: {…}, renderColumn: ƒ, …}
_source: {fileName: '/path/src/components/Table/index.js
},
]
[
{
"key": 1,
"launch_date_utc": "2006-03-24T22:30:00.000Z",
"location": "Kwajalein Atoll",
"mission_name": "FalconSat",
"orbit": "LEO",
"launch_success": false,
"upcoming": false,
"rocket_name": "Falcon 1"
},
{...}
]
当尝试包装内为
循环内map()
函数如下问题。不使用renderCell
方法编译。
renderBody = () => {
return (
<TableBody>
{this.props.rows.map( row => {
<TableRow key={row.key}>
{
for (var prop in row) {
if (row.hasOwnProperty(prop)) {
<TableCell align="right">{ row[prop] }</TableCell>
}
}
}
</TableRow>
})}
</TableBody>
)
}
编辑:
<TableBody>
{(pagination
? rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
: rows
).map((row) => {
return (
<TableRow
onClick={onRowClicked(row)}
hover
role="checkbox"
tabIndex={-1}
key={row[props.rowsUniqueKey]}
>
{columns.map((column) => {
const value = row[column.id];
return (
<>
<TableCell
key={column[props.columnsUniqueKey]}
align={column.align}
>
{column.format && typeof value === 'number'
? column.format(value)
: value}
</TableCell>
</>
);
})}
{/* { enableActions && <TableCell> Actions </TableCell> } */}
</TableRow>
);
})}
</TableBody>
来自:在反应材质UI表中创建动态动作列
要呈现JSX元素数组,您应该能够执行以下操作:
renderCell = (row) => {
return row.map(cell => {
return <TableCell key={i} align="right">{ row[prop] }</TableCell>
}
}
简介 Laravel 包含各种各样的全局「辅助」PHP 函数,框架本身也大量地使用了这些功能;如果你觉得方便,你可以在你的应用中自由的使用它们。 可用方法 数组 & 对象 array_add array_collapse array_divide array_dot array_except array_first array_flatten array_forget array_get arra
列标字符转化 获取扩展版本 查看作者信息
辅助函数,顾名思义,是帮助我们完成特定任务的函数。每个辅助函数文件仅仅是一些函数的集合。例如,URL Helpers 可以帮助我们创建链接,Form Helpers 可以帮助我们创建表单,Text Helpers 提供一系列的格式化输出方式,Cookie Helpers 能帮助我们设置和读取COOKIE, File Helpers 能帮助我们处理文件,等等。 跟其他部分不同的是,辅助函数不是用类的
辅助函数,顾名思义,是帮助我们完成特定任务的函数。每个辅助函数文件都是某一类 函数的集合。例如, URL 辅助函数 帮助我们创建链接,表单辅助函数**帮助 我们创建表单元素,**本文辅助函数 帮助我们处理文本的格式化,Cookie 辅助函数 帮助我们读取或设置 Cookie ,文件辅助函数 帮助我们处理文件,等等等等。 不同于 CodeIgniter 中的大多数系统,辅助函数没有使用面向对象的方式
存放位置 Laravel 提供了很多 辅助函数,有时候我们也需要创建自己的辅助函数。 必须 把所有的『自定义辅助函数』存放于 app 文件夹中。 并在 composer.json 文件中加载,方法请见: Laravel 的自定义函数 helpers.php 文件存放位置
数组辅助函数的文件涵盖了一些用于辅助数组操作的函数。 装载本辅助函数 本辅助函数的装载通过如下代码完成: $this->load->helper('array'); 可用的函数如下: element() 获取数组中的元素。本函数测试数组的索引是否已设定并含有数值。如果已设有数值则返回该数值,否则返回 FALSE,或任何你设定的默认数值(函数第三个参数)。范例: $array = array('co