渲染钩子
在模块化设计中,很多模块是通用的,那么一些通用模块设计的功能,他不可能完全符合所有项目的需求,例如 duxcmsMall
这个是商品模块,里面有商品详情,商品列表、分类、快速购买等功能
例如商品详情中,底部有购物车按钮,但是在我当前的项目中,我还需要在购物车的旁边加一个客服按钮,这种情况就可以使用渲染钩子来完成
底部导航条的代码如下,<mallHook.Render mark='detail.footer.btn'>
这就是用来定义钩子位置的
const Footer = () => {
return <>
<Divider padding={0} />
<Row items='center' className='bg-white p-1 gap-4'>
<Row className='gap-3' items='center'>
<mallHook.Render mark='detail.footer.btn'>{FooterCart}</mallHook.Render>
</Row>
<Row className='gap-2' justify='end' grow style={{ marginLeft: px(56) }}>
<mallHook.Render mark='detail.footer.cart'>
<GoodsSpec.Button type='cart'>
<Button type='secondary' size='l' radiusType='round'>加入购物车</Button>
</GoodsSpec.Button>
</mallHook.Render>
<mallHook.Render mark='detail.footer.buy'>
<GoodsSpec.Button type='buy'>
<Button type='primary' size='l' radiusType='round'>立即购买</Button>
</GoodsSpec.Button>
</mallHook.Render>
</Row>
</Row>
</>
}
那么,需要在我当前的项目中使用这个钩子,像下面这样,将客服按钮添加在购物车的右边
mallHook.addAfter('detail.footer.btn', () => {
return <Column items='center'
onClick={toCustom}
>
<CmsIcon name='service' size={54} style={{ lineHeight: px(54) }} />
<Text color={2} size={1}>客服</Text>
</Column>
})
下面将详细讲解如何使用渲染钩子
钩子创建
在使用钩子之前需要先创建一个钩子,像这个商城的钩子,创建在 src/duxcmsMall/utils/index.js
,并导出
import { RenderHook } from '@/duxapp'
export const mallHook = new RenderHook()