如何使用 JSX 和 Reactstrap(例如 Bootstrap)行和列来布局矩阵? JSX 不适合我的 Array.prototype.map
How can I use JSX and Reactstrap (e.g. Bootstrap) Rows and Cols to layout a matrix? JSX is not playing nice with my Array.prototype.map
我正在尝试在 React 组件中使用 Reactstrap 布局 n x n 矩阵。我的想法是在每一行的开头添加一个 <Row>
元素,并在每一行的末尾添加一个 </Row>
元素。但是我无法让它与 JSX 一起工作,它一直在抱怨 Parsing error: Unexpected token, expected ","
我正在将一个 'characters' 的数组传递给我的组件,并尝试在我的 render
方法中使用 Array.prototype.map
来生成 JSX 布局,布置一个 [=18] 的矩阵=],每个组件一个。想象一组扑克牌:我只想把它们排成一个正方形。
render() {
const {props: {characters, rowSize, cardSize}} = this
const rowUnit = 12 / rowSize
const cardLayout = characters.map((character, i) => {
let isRow = (i % rowSize === 0)
let isRowFinish = ((i + 1) % rowSize === 0)
return (
{isRow && <Row>}
<Col xs='6' md={rowUnit}>
<CharacterCard key={i + Math.random()}
character={character}
cardSize={cardSize}
/>
</Col>
{isRowFinish && </Row>}
)
})
return <div>
<Container>
{cardLayout}
</Container>
</div>
}
但我收到以下错误
我明显犯的错误在哪里?感谢您的任何建议...
想出了两种渲染网格的方法。根据您希望定义行的方式,行为会略有不同。
您可以在 Stackblitz 上查看这两种方法的示例。
方法一:
将所有列放在一行中并使用列大小调整道具。
export default ({ characters, cardSize, rowSize }) => {
const rowUnit = 12 / rowSize;
const cardLayout = characters
.map((character, i) => (
<Col xs={6} sm={rowUnit} key={`col-${i}`}>
<CharacterCard
key={i + Math.random()}
character={character}
cardSize={cardSize}
/>
</Col>
)
)
return (
<div>
<Container>
<Row>
{cardLayout}
</Row>
</Container>
</div>
)
}
方法二:
将列数组缩减为行数组。
export default ({ characters, cardSize, rowSize }) => {
const rowUnit = 12 / rowSize;
const cardLayout = characters
.map((character, i) => (
<Col sm={rowUnit} key={`col-${i}`}>
<CharacterCard
key={i + Math.random()}
character={character}
cardSize={cardSize}
/>
</Col>
)
)
.reduce((rows, col, index) => {
let currentRow
if (index % rowSize === 0) {
currentRow = [];
rows.push(currentRow)
} else {
currentRow = rows[rows.length - 1]
}
currentRow.push(col)
return rows;
}, []
)
.map((cols, i) => <Row key={`row-${i}`}>{...cols}</Row>)
return (
<div>
<Container>
{cardLayout}
</Container>
</div>
)
}
我正在尝试在 React 组件中使用 Reactstrap 布局 n x n 矩阵。我的想法是在每一行的开头添加一个 <Row>
元素,并在每一行的末尾添加一个 </Row>
元素。但是我无法让它与 JSX 一起工作,它一直在抱怨 Parsing error: Unexpected token, expected ","
我正在将一个 'characters' 的数组传递给我的组件,并尝试在我的 render
方法中使用 Array.prototype.map
来生成 JSX 布局,布置一个 [=18] 的矩阵=],每个组件一个。想象一组扑克牌:我只想把它们排成一个正方形。
render() {
const {props: {characters, rowSize, cardSize}} = this
const rowUnit = 12 / rowSize
const cardLayout = characters.map((character, i) => {
let isRow = (i % rowSize === 0)
let isRowFinish = ((i + 1) % rowSize === 0)
return (
{isRow && <Row>}
<Col xs='6' md={rowUnit}>
<CharacterCard key={i + Math.random()}
character={character}
cardSize={cardSize}
/>
</Col>
{isRowFinish && </Row>}
)
})
return <div>
<Container>
{cardLayout}
</Container>
</div>
}
但我收到以下错误
我明显犯的错误在哪里?感谢您的任何建议...
想出了两种渲染网格的方法。根据您希望定义行的方式,行为会略有不同。
您可以在 Stackblitz 上查看这两种方法的示例。
方法一:
将所有列放在一行中并使用列大小调整道具。
export default ({ characters, cardSize, rowSize }) => {
const rowUnit = 12 / rowSize;
const cardLayout = characters
.map((character, i) => (
<Col xs={6} sm={rowUnit} key={`col-${i}`}>
<CharacterCard
key={i + Math.random()}
character={character}
cardSize={cardSize}
/>
</Col>
)
)
return (
<div>
<Container>
<Row>
{cardLayout}
</Row>
</Container>
</div>
)
}
方法二:
将列数组缩减为行数组。
export default ({ characters, cardSize, rowSize }) => {
const rowUnit = 12 / rowSize;
const cardLayout = characters
.map((character, i) => (
<Col sm={rowUnit} key={`col-${i}`}>
<CharacterCard
key={i + Math.random()}
character={character}
cardSize={cardSize}
/>
</Col>
)
)
.reduce((rows, col, index) => {
let currentRow
if (index % rowSize === 0) {
currentRow = [];
rows.push(currentRow)
} else {
currentRow = rows[rows.length - 1]
}
currentRow.push(col)
return rows;
}, []
)
.map((cols, i) => <Row key={`row-${i}`}>{...cols}</Row>)
return (
<div>
<Container>
{cardLayout}
</Container>
</div>
)
}