标签:属性 接受 loss 额外 数组 www 支持 mda map
react中一个常见模式是一个组件返回多个元素,Fragments允许你将子列表分组,而无需像DOM添加额外的节点。
render() { return ( <React.Fragment> <ChildA /> <ChildB /> <ChildC /> </React.Fragment> ); }
一个常见模式是为一个组件返回一个子元素列表。以这个示例的 React 片段为例:
class Table extends React.Component { render() { return ( <table> <tr> <Columns /> </tr> </table> ); } }
为了渲染有效的 HTML , <Columns /> 需要返回多个 <td> 元素。如果一个父 div 在 <Columns /> 的 render()**** 函数里面使用,那么最终的 HTML 将是无效的。
class Table extends React.Component { render() { return ( <table> <tr> <Columns /> </tr> </table> ); } }
在 <Table /> 组件中的输出结果如下:
<table> <tr> <div> <td>Hello</td> <td>World</td> </div> </tr> </table>
所以,我们介绍 Fragments。
class Columns extends React.Component { render() { return ( <React.Fragment> <td>Hello</td> <td>World</td> </React.Fragment> ); } }
在正确的 <Table /> 组件中,这个结果输出如下:
<table> <tr> <td>Hello</td> <td>World</td> </tr> </table>
如果子元素需要父元素包裹起来,但是不需要渲染父元素,我们就可以使用fragment。其实它的功能和vue的template一样,都只是占位,不渲染。
我们也可以把<React.Fragment></React.Fragment>简写为<></>,看着像空组件;
<></> 是 <React.Fragment/> 的语法糖。
<></> 语法不能接受键值或属性。
如果你需要一个带 key 的片段,你可以直接使用 <React.Fragment /> 。
一个使用场景是映射一个集合为一个片段数组 — 例如:创建一个描述列表:
function Glossary(props) { return ( <dl> {props.items.map(item => ( // 没有`key`,将会触发一个key警告 <React.Fragment key={item.id}> <dt>{item.term}</dt> <dd>{item.description}</dd> </React.Fragment> ))} </dl> ); }
key 是唯一可以传递给 Fragment 的属性。在将来,我们可能增加额外的属性支持,比如事件处理。
原作者:这样就好_yang,原链接:https://www.jianshu.com/p/36bb4d88f26c
标签:属性 接受 loss 额外 数组 www 支持 mda map
原文地址:https://www.cnblogs.com/GeniusZ/p/12482417.html