Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 这些都是高阶组件吗?_Reactjs - Fatal编程技术网

Reactjs 这些都是高阶组件吗?

Reactjs 这些都是高阶组件吗?,reactjs,Reactjs,HOC或更高阶组件的定义如下: 高阶分量是一个函数,它接受一个分量并 返回一个新组件 例如: const EnhancedComponent = higherOrderComponent(WrappedComponent); 但是下面的例子呢? 在以下示例中,砌体构件是否也是临时构件 <Masonry> {childElements} </Masonry> {childElements} 那么这个呢?ErrorBoundaryHOC吗 <ErrorB

HOC或更高阶组件的定义如下:

高阶分量是一个函数,它接受一个分量并 返回一个新组件

例如:

const EnhancedComponent = higherOrderComponent(WrappedComponent);
但是下面的例子呢? 在以下示例中,砌体构件是否也是临时构件

<Masonry>
    {childElements}
</Masonry>

{childElements}
那么这个呢?ErrorBoundaryHOC吗

<ErrorBoundary>
    <MyComponent />
</ErrorBoundary>

如果您可以考虑从函数(HOC)和JSX生成的类型,这会有所帮助

当您使用JSX时,您正在调用
React.createElement
,它将提供一个新的React元素

此React元素是作为
子项传递给您的
砌体
ErrorBoundary
的元素

因为类型是React元素,所以它不符合我们定义的HOC,HOC必须接收组件而不是元素

另一方面,
higherOrderComponent
函数接受
WrappedComponent
组件,并返回一个新组件

功能

考虑这一点的另一种方法是使用简单的函数。如果我有一个以函数为参数的函数,我可以说我的函数是一个高阶函数

例如:

const filter=predicate=>arr=>arr.filter(predicate);
常数lessThan10=过滤器(x=>x<10);
const set1=lessThan10([2,4,6,8,10]);//[2, 4, 6, 8]
const set2=lessThan10([5,10,15,20]);//[5]
这里我们可以说,
filter
是一个高阶函数,因为它接受一个函数作为其参数,并返回一个函数作为其结果(一个等待数组的函数)


我们还可以看到
lessThan10
不是一个高阶函数。它既不接受函数作为参数,也不返回函数作为结果。

第二个函数不是HOC。它只是一个呈现
子属性的组件。不同之处在于,HOC使用的组件的第二个示例是包装React元素(即React.createElement的结果)。定义中描述的HOC必须包含一个组件。谢谢大家的回答。我只是扩展了我的问题(很抱歉)。第三个例子呢?请回答最后一个问题。您说过:另一方面,您的higherOrderComponent函数接受WrappedComponent组件,并返回一个新组件。在本例中,higherOrderComponent是一个HOC函数,它返回一个名为EnhancedComponent的HOC组件吗?EnhancedComponent是高阶组件吗?术语“高阶组件”指的是特定类型的高阶函数。也就是说,HOC是一个接受组件并返回组件的函数。返回的组件不是高阶组件(它不接受或返回任何组件)。我们的
EnhancedComponent
与其他组件一样,只是一个组件。术语令人困惑,因为高阶组件实际上根本不是组件,而是获取和返回组件的函数。现在我明白了。谢谢大家。我爱你们所有人。