reactjs - React Fragment 如何改进布局?
问题描述
这是 Next.js 官方指南,布局
export default function Layout({ children }) {
return <div>{children}</div>
}
我正在查看一个带有布局的 repo
import { Component, Fragment } from 'react'
const Layout = ({ children }) => {
return (
<React.Fragment>
<p>header</p>
{children}
<p>footer</p>
</React.Fragment>
);
};
export default Layout;
React Fragment 的优缺点是什么?
解决方案
任何组件都必须返回一个元素。有三个要素:
<p>header</p> //1
{children} //2 +
<p>footer</p> //3
因此,它们将被一些标签(div、main 等)包裹:
<div>
<p>header</p>
{children}
<p>footer</p>
</div>
呈现为:
<body>
<div>
<p>header</p>
<p>first paragraph</p>
<p>second paragraph</p>
<p>footer</p>
<div>
</body>
使用片段(您可以使用<>
或<React.Fragment>
):
<>
<p>header</p>
{children}
<p>footer</p>
</>
呈现为:
<body>
<p>header</p>
<p>first paragraph</p>
<p>second paragraph</p>
<p>footer</p>
</body>
当您有一行作为组件时,在表格中使用 Fragment 也很方便 - 您不会破坏标记。
在底层,JSX 变成了这样的代码:
"use strict";
const layout = ({
children
}) => {
return React.createElement(
"div", // HTML tag name or React.Fragment
null, // Props or attributes (for div)
React.createElement("p", null, "header"), // 1th children of div
children, // 2nd children of div
React.createElement("p", null, "footer") // 3rd children of div
);
};
如您所见React.createElement()
,获取三个参数,其中第一个是 rootHTML tag
或 aFragment
而不是它,它的内容将被放置。与 不同HTML tags
,aFragment
只能有一个key
属性(也只能由 使用React
)
推荐阅读
- ios - 为什么调度组不等待?
- unity3d - Unity3d - 什么是 linecast hit.normal
- python - 如果另一个 DEF 不起作用,如何运行一个 DEF 以及如何构建它?
- arrays - 对包含在数组中的字典进行排序
- html - 将第二个垫子工具栏放在主垫子工具栏下?
- python - 气流 BashOperator 在 Python 脚本之间传递参数
- vba - 查找匹配的重复项并为每个项涂上不同的颜色
- c - 查找数组中随机数的频率
- android - Xamarin.Android 中的 java.lang.IllegalStateException onCreate 活动
- python-3.x - anaconda 和 VScode 的问题