react中什么是hoc? - 网站

react中什么是hoc?

分类:React入门教程_React框架基础教程 · 发布时间:2020-03-14 17:09 · 阅读:1144

什么是HOC?

HOC(Higher-order component)是一种React 的进阶使用方法,只要还是为了便于组件的复用。强调一点,HOC本身并不是 React API, 它就是一个方法,一个接收一个组件作为参数,返回一个增强的组件的方法。

什么时候使用HOC?

高阶组件的目的是解决一些交叉问题(Cross-Cutting Concerns)。而最早时候 React 官方给出的解决方案是使用 mixin 。但官方也意识到了使用mixins技术来解决此类问题所带来的困扰远高于其本身的价值。更多资料可以查阅官方说明。

在React开发过程中,在很多情况下,组件需要被“增强”(enhanced),比如给组件添加或修改一些特定的属性,针对多个组件的代码复用。

概括的讲,HOC能够实现:

1. 代码复用,代码模块化

2. 渲染劫持, 操作state

3. Props 增删改

HOC的实现方式

在这节中我们将学习两种主流的在 React 中实现高阶组件的方法:属性代理(Props Proxy)和 反向继承(Inheritance Inversion)。

基于属性代理(Props Proxy)的方式

属性代理是最常见的高阶组件的使用方式。可以通过对被包裹组件的props进行修改,或者添加新的props再传递给此组件,这就是属性代理。例如:

1.png-600

基于反向继承(Inheritance Inversion, 缩写II)的方式

反向继承的实现为:

2.png-600

返回的高阶组件类(Enhanced)继承了 WrappedComponent。这被叫做反向继承是因为 WrappedComponent 被动地被 Enhancer 继承,而不是 WrappedComponent 去继承 Enhancer。

反向继承允许高阶组件通过this关键词获取 WrappedComponent,意味着它可以获取到 state,props,组件生命周期(component lifecycle)钩子,以及渲染方法(render)。

使用高阶组件遇到的问题

静态方法丢失

当使用高阶组件包裹原始组件,返回的新组件会丢失原始组件的所有静态方法。例如:

解决方案:

  • 手动拷贝所有静态方法给新组件;(不推荐)

  • 使用hoist-non-react-statics来帮你自动处理,它会自动拷贝所有非React的静态方法;(react-router 里withRouter就使用了这个包)

Refs属性不能传递

解决方案:

新组建传递一个ref 回调函数属性给原始组件,也就是将ref组件绑定到新组件上;如:

<Enhancer getRef={ref => this.wrappedC = ref} />

更多web开发知识,请查阅 HTML中文网 !!

标签:
react hoc

相关文章

react中怎么使用sass?

方法:1、使用npm工具安装sass-loader和node-sass依赖;2、配置webpack.config.js文件;3、在需要的组件中引入scss,然后添加scss代码即可。

react怎么判断checkbox是否被选中

react判断checkbox是否被选中的方法:可以通过【if ($(&quot;#checkbox-id&quot;).get(0).checked) {}】方法来进行判断。还可以通过原生js方法来进行判断,如【ele.checked】。

react子组件如何向父组件传值?

在react中,首先通过父组件给子组件传递一个函数,然后子组件通过参数传到父组件,通过props来传递函数的引用,并通过回调的方式实现;其实就是子组件调用父组件的方法,把值以形参的方式传出来。

react组件什么时候会重新渲染?

每当组件状态改变时,React就会调用render函数进行重新渲染。更改状态意味着当调用setState函数时,React触发更新;这不仅意味着将调用组件的render函数,而且还意味着重新渲染其所有后续子组件,无论其prop是否已更改。

react组件生命周期有几个阶段?

React组件生命周期有三个阶段:加载、更新和卸载。加载阶段表示一个组件实例被创建并被插入到DOM中;更新阶段表示由状态或属性的改变导致组件的重新渲染;卸载阶段表示组件从DOM中移除。

返回分类 返回首页