react学习
React 应用程序是由 组件 组成的。一个组件是 UI(用户界面)的一部分,它拥有自己的逻辑和外观。组件可以小到一个按钮,也可以大到整个页面。
React.Fragment 和 <></>
<></>
其实是 React.Fragment 的语法糖,它们两个都可以用来对元素进行分组,渲染成 HTML 后不会增加额外的标签
jsx语法编写必须要有一个根元素,类似于vue中的template的写法,再进行嵌套时,可能会出现额外增加dom节点,这样的弊端
- 不符合html的dom规范
- 增加一些额外无意义的标签,增加html渲染的内容,影响性能
问题示例
不使用ragment
import { Fragment } from 'react';
function TableData () {
return (
<div>
<td>Eat</td>
<td>Learn</td>
<td>Code</td>
</div>
);
}
export default function Table () {
return (
<table>
<tbody>
<tr>
<TableData />
</tr>
</tbody>
</table>
);
}
上面的代码会渲染为:
渲染的结果就是在tr中增加了一个无意义的div节点。那
TableData
方法可以把div去掉吗?显然是不行的。这是因为 jsx语法本身需要包含一个根元素,移除后,则不符合jsx的语法,编译会报错,无法渲染。
<table>
<tbody>
<tr>
<div>
<td>Eat</td>
<td>Learn</td>
<td>code</td>
</div>
</tr>
</tbody>
</table>
使用 React.Fragment
语法
import { Fragment } from 'react';
function TableData () {
return (
<Fragment>
<td>Eat</td>
<td>Learn</td>
<td>Code</td>
</Fragment>
);
}
export default function Table () {
return (
<table>
<tbody>
<tr>
<TableData />
</tr>
</tbody>
</table>
);
}
上面的代码会渲染为:
<table>
<tbody>
<tr>
<td>Eat</td>
<td>Learn</td>
<td>code</td>
</tr>
</tbody>
</table>
使用语法糖 <></>
import { Fragment } from 'react';
function TableData () {
return (
<>
<td>Eat</td>
<td>Learn</td>
<td>Code</td>
</>
);
}
export default function Table () {
return (
<table>
<tbody>
<tr>
<TableData />
</tr>
</tbody>
</table>
);
}
上述代码渲染为:
<table>
<tbody>
<tr>
<td>Eat</td>
<td>Learn</td>
<td>code</td>
</tr>
</tbody>
</table>
本文来自博客园,作者:柯南小海盗,转载请注明原文链接:https://www.cnblogs.com/knxhd/p/18614724