使用hooks代替connect
在react中的connect的使用
import React, { memo, useEffect } from 'react'
import { useDispatch, useSelector } from 'react-redux';
import { Carousel, Image } from 'antd'
// import { connect } from 'react-redux';
import { changeRecommendBannersFunc } from 'store/discover/actionsCreator'
import RecommendWrapper from './styled'
const DDRecommend = memo(function DDRecommend (props) {
const {banners} =props;
useEffect(() => {
getRecommendBanners ()
}, [])
return (
<RecommendWrapper className='wrap-v1'>
<div>
<Carousel autoplay className='banners-img-outer' >
{
banners.map((item, index) => {
return (
<a href="" className='banners-img-link' key={index}>
<img className='banners-img' src={item.imageUrl} alt="" />
</a>
)
})
}
</Carousel>
<div>dfasd</div>
</div>
</RecommendWrapper>
)
})
const mapStateToProps = store => {
return {
banners: store.discoverInfo.banners
}
}
const mapDispatchToProps = dispatch => {
return {
getRecommendBanners () {
dispatch(changeRecommendBannersFunc)
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)(DDRecommend)
使用hooks解决
import React, { memo, useEffect } from 'react'
import { useDispatch, useSelector } from 'react-redux';
import { Carousel, Image } from 'antd'
// import { connect } from 'react-redux';
import { changeRecommendBannersFunc } from 'store/discover/actionsCreator'
import RecommendWrapper from './styled'
const DDRecommend = memo(function DDRecommend (props) {
const dispatch = useDispatch();
const { banners } = useSelector(state => ({
banners: state.discoverInfo.banners
}))
useEffect(() => {
dispatch(changeRecommendBannersFunc())
}, [dispatch])
return (
<RecommendWrapper className='wrap-v1'>
<div>
<Carousel autoplay className='banners-img-outer' >
{
banners.map((item, index) => {
return (
<a href="" className='banners-img-link' key={index}>
<img className='banners-img' src={item.imageUrl} alt="" />
</a>
)
})
}
</Carousel>
<div>dfasd</div>
</div>
</RecommendWrapper>
)
})
export default DDRecommend;
但是使用connect解决的时候,内部对这个组件做了优化,当这个组件内部的子组件里的props没有依赖父组件里的变量或者是依赖的变量没有发生改变的时候,子组件是不会进行刷新的,因为内部做了浅层比较,但是使用hook的时候,他们内部是没有进行浅层比较的,如果要完成优化,需要对useSelector传入第二个参数,浅层比较的函数
import { useDispatch, useSelector, shallowEqual } from 'react-redux';
.
.
.
.
.
const { banners } = useSelector(state => ({
banners: state.discoverInfo.banners
}), shallowEqual)