gpt4 book ai didi

twitter-bootstrap - 用于 Bootstrap 网格的 React JSX 条件包装器

转载 作者:行者123 更新时间:2023-12-03 13:35:16 25 4
gpt4 key购买 nike

在使用 Bootstrap 网格渲染 React 组件时面对这个有趣的事情,假设我需要渲染两个 col-md-6row ,每个<Book />组件放入 col-md-6div block

+---------------------+
| col-md-6 | col-md-6 |
| Book | Book | <--- row
|---------------------|
| col-md-6 | col-md-6 |
| Book | Book | <--- row
+---------------------+

它预计形成类似于下面的结构,

<Row>
<Col>
<Book />
</Col>
<Col>
<Book />
</Col>
</Row>
<Row>
<Col>
<Book />
</Col>
<Col>
<Book />
</Col>
</Row>

我尝试渲染如下,

export default class BookList extends React.Component {
render() {
let books = [];
lodash.each(this.props.books, function (book, index) {
index % 2 === 0 ? books.push(<div className="row" key={index}>): null;
books.push(
<div className="col-md-6">
<Book />
</div>
)
index % 2 === 1 || index === this.props.books.length - 1? books.push(</div>): null
})

return (
<div className="container">
{books}
</div>
)
}
}

但是输出是格式错误的 HTML,看起来 JSX 验证了渲染上的每个项目,而不是等待结束标记。

有什么方法或技巧可以使其正常工作吗?

最佳答案

您将 JSX 视为字符串而不是 XML,当它编译为 JS 时,它是无效的。

React 可以很好地处理小型组件,因此将 BooksContainer 分成对并渲染 BooksRows,BooksRows 将渲染书籍( fiddle - 检查结果):

代码:

const Book = ({ book }) => (
<div className="col-md-6">
{ book.name }
</div>
);

const BooksRow = ({ bookPair }) => (
<div className="row">
{
bookPair.map((book, index) => (
<Book key={ index } book={ book }/>
))
}
</div>
);

const BooksContainer = ({ books }) => (
<div className="container">
{
books.reduce((pairs, book, index) => { // split the books into pairs
if(index % 2 === 0) {
pairs.push([]);
}
pairs[pairs.length - 1].push(book);
return pairs;
}, []).map((pair, index) => ( // map the pairs to row
<BooksRow key={ index } bookPair={ pair } />
))
}
</div>
);

const books = [
{
name: 'cats'
},
{
name: 'dogs'
},
{
name: 'rabbits'
},
{
name: 'elephents'
},
{
name: 'snails'
},
{
name: 'tigers'
}
];

ReactDOM.render(
<BooksContainer books={ books } />,
document.getElementById('container')
);

关于twitter-bootstrap - 用于 Bootstrap 网格的 React JSX 条件包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36268705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com