Javascript React:变量中的jsx、函数中的jsx、独立组件中的jsx
要在较大的组件中呈现较小的组件/jsx,可以采用多种方法。例如,考虑这一点: 方法1:Javascript React:变量中的jsx、函数中的jsx、独立组件中的jsx,javascript,html,reactjs,jsx,Javascript,Html,Reactjs,Jsx,要在较大的组件中呈现较小的组件/jsx,可以采用多种方法。例如,考虑这一点: 方法1: function BigComponent(props) { const renderSmallComponent1 = () => <div>{props.a}</div>; const renderSmallComponent2 = () => <div>{props.b}</div>; return ( <div&g
function BigComponent(props) {
const renderSmallComponent1 = () => <div>{props.a}</div>;
const renderSmallComponent2 = () => <div>{props.b}</div>;
return (
<div>
{renderSmallComponent1()}
{renderSmallComponent2()}
</div>
)
}
这与方法3类似,但在通过开发工具进行调试时,方法3与方法4在执行上略有不同。您看过React项目中编译的JS了吗 JSX标记本质上转换为
React.createElement
语句。你可以。基本上,语法是:
React.createElement(FunctionOrClassComponent,{props},…子项)
在你的三个例子中,这都会发生。在所有三个示例中,较小的组件都是功能组件,而不是类组件。也就是说,它们没有类组件的React生命周期方法,但是它们可以使用等效的React钩子——如果您愿意的话
编辑:计算(实例化和渲染)取决于渲染逻辑。如果您有条件呈现语句,或者您的函数基于某些条件返回null(或更少的内容),那么显然您做的工作更少。正如您在下面的注释中正确指出的,当您将JSX.Element分配给变量时,该变量是内联计算的,而不是作为函数的结果计算的,因此这会立即发生
对我来说,这三种方法都是有效的。要回答您的问题:
- 开发经验,
- 对于具有最小状态的小组件,作为变量或lambda的功能组件便于编写,并且在以后重新访问代码时易于读取/解析。当一个组件变得更复杂时,您可能需要重新考虑它的编写方式,或者使用类组件
- 框架如何对待它们,
- 据我所知,该框架在编译方面对您的三个示例都一视同仁。我不确定渲染优化
- 是否有任何性能优化,
- 您的示例没有描述任何计算繁重的内容,因此性能优化选项并不明显
- 在所有这些方面,运行时行为是否存在差异?
- 它们都被转换为React元素,监视道具的更改,如果父级重新渲染(如果没有使用React.memo之类的东西),则会重新渲染它们——与基于类的元素可能存在差异,但我想这三个示例之间的运行时差异是最小的
- 在某些场景中使用哪一个更好?
- 这三者之间的差异更多的是标准或礼仪问题,而不是功能结果。作为一名开发人员,我将能够阅读和理解这三种方法,但在团队中工作——我希望看到一种标准方法
function BigComponent(props) {
const smallComponent1 = <div>{props.a}</div>;
const smallComponent2 = <div>{props.b}</div>;
return (
<div>
{smallComponent1}
{smallComponent2}
</div>
)
}
function SmallComponent1({ a }) {
return <div>{a}</div>;
}
function SmallComponent2({ b }) {
return <div>{b}</div>;
}
function BigComponent(props) {
return (
<div>
<SmallComponent1 a={props.a} />
<SmallComponent2 b={props.b} />
</div>
)
}
function BigComponent(props) {
const SmallComponent1 = () => {
return <div>{props.a}</div>;
}
const SmallComponent2 = () => {
return <div>{props.b}</div>;
}
return (
<div>
<SmallComponent1 />
<SmallComponent2 />
</div>
)
}