Hooks实现一个自定义的Modal组件
Posted 前端e站
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hooks实现一个自定义的Modal组件相关的知识,希望对你有一定的参考价值。
Hooks实现一个自定义的Modal组件
不管你做什么样的前端项目,Modal组件肯定会使用到(没使用过的举手🙋♂️?)。
export const useModal = (initTitle: string, initContent: string | React.ReactElement) =>
const [visible, setVisible] = useState(false);
const [title, setTitle] = useState(initTitle);
const [content, setContent] = useState(initContent);
const CustomModal = () =>
return (
<Modal
visible=visible
title=title
closable=false
footer=null
>
content
</Modal>
);
const show = (content?: string | React.ReactElement) =>
content && setContent(content);
setVisible(true);
;
const hide = (delay?: number) =>
if (delay)
setTimeout(() => setVisible(false), delay);
else
setVisible(false)
;
return
show, hide, CustomModal, setTitle, setContent
// 使用
const hide, show, CustomModal = useModal('系统提示', '正在初始化...');
render()
<div><CustomModal /></div>
在上面的代码中,首先我们使用了useState定义了3个state属性,这里示例中就3个,如果你需要更多的自定义内容,可以自己再扩展。useState方法给定一个初始化的属性值,返回一个属性变量和设置该属性的方法。
以visible为例,这个属性用来控制Modal的隐藏和显示。在使用useState方法返回的setVisible的时候,组件状态会自动更新,然后触发重新渲染,是不是跟React的Class组件的setState有点类似?
在自定义的Modal中,我们返回了show,hide方法,setTitle,setContent方法,以及一个CustomModal组件,这样外部在使用的时候就可以直接像上面的使用代码一样,放到render中即可。
在需要修改title或者修改内容的时候,调用setTitle和setContent修改modal中的内容,注意这里的setContent不止可以传入String,还可以传入一个ReactElement,所有里面的你可以传一个Form进去,实现弹出框形式的表单组件。
以上是关于Hooks实现一个自定义的Modal组件的主要内容,如果未能解决你的问题,请参考以下文章