Reactjs 这些都是高阶组件吗?
HOC或更高阶组件的定义如下: 高阶分量是一个函数,它接受一个分量并 返回一个新组件 例如:Reactjs 这些都是高阶组件吗?,reactjs,Reactjs,HOC或更高阶组件的定义如下: 高阶分量是一个函数,它接受一个分量并 返回一个新组件 例如: const EnhancedComponent = higherOrderComponent(WrappedComponent); 但是下面的例子呢? 在以下示例中,砌体构件是否也是临时构件 <Masonry> {childElements} </Masonry> {childElements} 那么这个呢?ErrorBoundaryHOC吗 <ErrorB
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
与其他组件一样,只是一个组件。术语令人困惑,因为高阶组件实际上根本不是组件,而是获取和返回组件的函数。现在我明白了。谢谢大家。我爱你们所有人。