1、为什么使用Fragments
A.在一个中嵌套一个包含列的组件class Table extends React.Component { render() { return ( <table> <tr> <Columns /> </tr> </table> ); }}class Columns extends React.Component { render() { return ( <div> <td>Hello</td> <td>World</td> </div> ); }}
class Table extends React.Component {render() {return (<table><tr><Columns /></tr></table>);}}class Columns extends React.Component {render() {return (<div><td>Hello</td><td>World</td></div>);}}
<Columns /> 需要返回多个 <td> 元素以使渲染的 HTML 有效。如果在 <Columns /> 的 render() 中使用了父 <div>,则生成的 HTML 将无效。
B.得到一个 <Table /> 输出在HTML中解析无效
<table><tr><div><td>Hello</td><td>World</td></div></tr></table>
2、Fragments的用法
A.将返回的列使用 <Fragment > 标签包含
class Columns extends React.Component {render() {return (<React.Fragment><td>Hello</td><td>World</td></React.Fragment>);}}
B.使用短语法替代<Fragment > 标签
class Columns extends React.Component {render() {return (<><td>Hello</td><td>World</td></>);}}
C.得到HTML可以解析的 <Table />
<table><tr><td>Hello</td><td>World</td></tr></table>
3、带 key 的 Fragments
使用显式 <React.Fragment> 语法声明的片段可能具有 key。一个使用场景是将一个集合映射到一个 Fragments 数组。
key 是唯一可以传递给 Fragment 的属性。未来React官方可能会添加对其他属性的支持,例如事件。
key是Fragment作为遍历的元素必要的属性
function Glossary(props) {return (<dl>{props.items.map(item => (// 没有`key`,React 会发出一个关键警告<React.Fragment key={item.id}><dt>{item.term}</dt><dd>{item.description}</dd></React.Fragment>))}</dl>);}
