其他分享
首页 > 其他分享> > antd Dialog 学习笔记

antd Dialog 学习笔记

作者:互联网

聊聊 AntD 中的 Dialog

先介绍三种常用的用法,

const Demo: React.FC = () => {
  const [visible, setVisible] = React.useState<boolean>(false);
  return (
    <Modal visible={visible} close={() => setVisible(false)}>
      <div>I am dialog body</div>
    </Modal>
  );
};
const Demo:React.FC=()=>{
    const [fns,elements]=Modal.useModal();
    const openDialog=()=>{
        const {update,destory}=fns.info({
            content:<div>I am dialog body</div>
        })
    }

    return (
        <Button onClick={()=>openDialog()}>Open Dialog</Button>
        {elements}
    )
}
function openDialog() {
  const { update, destory } = Modal.info({
    content: <div>I am dialog body</div>,
  });
}

rc-dialog 这个组件职责是什么?

这些个组件总是很复杂,让人看的云里雾里,很多的辅助功能将原本的功能给掩盖了,让初学者看得很累。

关闭的过程逻辑如下: onClose -> 外部组件调用 setVisible(false), Dialog 然后发现 visible=false, -> CSSMotion 开始走 leave 动画,动画结束后发出 afterClose 事件,然后在 DialogWrapper 里面会 返回 null,
这样整个 Dialog 就返回 null.

antd-modal 这个组件封装了什么?

学习一下useModal,

它的功能就是返回一个 ReactElement(用作容器),以及往这个 ReactElement 里面添加(删除)一个元素的方法。它主要使用了usePatchElement()这个 hook 函数,这个函数很简单,很有用。它就是返回一个容器,以及往容器中添加元素的方法,调用这个方法会返回删除这个元素的方法。我们只要将这个容器放到我们调用的 VD 上就行了,同时,我们可以通过 memo,让这个容器里的东西不参与当前 VD 的刷新,来提高性能。

export default function usePatchElement(): [
  React.ReactElement[],
  (element: React.ReactElement) => Function
] {
  const [elements, setElements] = React.useState<React.ReactElement[]>([]);

  const patchElement = React.useCallback((element: React.ReactElement) => {
    // append a new element to elements (and create a new ref)
    setElements((originElements) => [...originElements, element]);

    // return a function that removes the new element out of elements (and create a new ref)
    // it works a little like useEffect
    return () => {
      setElements((originElements) =>
        originElements.filter((ele) => ele !== element)
      );
    };
  }, []);

  return [elements, patchElement];
}

考虑写一个函数式弹框的组件,由如下需求:

标签:elements,const,VD,笔记,React,Dialog,组件,antd
来源: https://www.cnblogs.com/kongshu-612/p/15135144.html