高阶组件
接受个函数,并且返回也是个函数
举个🌰,需要从localStorage取得数据,在页面中展示
1 | import React, { Component } from 'react'; |
当其他组件也需要从localStorage里取数据,重复添加componentWillMount里的代码就显得很繁琐。所以修改一下:
1 | import React, { Component } from 'react'; |
调用高阶组件返回了新的组件
1 | import React, { Component } from 'react'; |
1)高阶组件可以对数据进行处理,再传给被包装的组件
2)再将props传入被包装组件
使用场景
1)对传入数据props拦截,进行修改、增加、删除操作
可以看上面那个例子
2)通过ref,可以在高阶组件中获取组件的实例,就可以使用实例的方法和属性
在类组件中定义了个changeName方法,用于修改state中的name
1 | import React, { Component } from 'react'; |
在高阶组件中可以拿到传入的组件的实例,并且可以调用到实例上的方法
1 | import React, { Component } from 'react'; |
3)组件状态提升
无状态的组件更容易被复用,将状态以及业务逻辑提升到高阶组件中
1 | import React, { Component } from 'react'; |
这个组件只有一个input标签,以及输入属性,这是一个无状态的组件
1 | import React, { Component } from 'react'; |
这个高阶组件中,将value的值,以及onChange的回调传入了InnerComponent的props中,保证了无状态组件中没有复杂的业务逻辑和状态改变。
4)其他元素包裹组件
1 | import React, { Component } from 'react'; |
这个高阶函数调加了一个div包裹了组件,并且设置了新的样式
1 | import React, { Component } from 'react'; |
参数传递
比如说有个父组件列表,获取的是用户信息的数据。
1 | import React, { Component } from 'react'; |
数据传递给子组件
1 | import React, { Component } from 'react'; |
再增加一个高阶组件,这里添加了一个外层标签,简单的设置了一下颜色的值,由调用的地方传参传入。这里需要注意的就是要将this.props再传入组件。
1 | import React, { Component } from 'react'; |