模态框如何优化大量重复代码?

发布于 2022-09-13 00:20:16 字数 356 浏览 20 评论 0

如题,在一个页面里经常会使用好多个自定义内容的模态框,因此也定义了大量控制模态框的state和方法:

const [showModal, setShowModal] = useState(false)
const hideModal = () => setShowModal(false)


<Modal visible={showModal} onClose={hideModal}>
  ......
</Modal>

如此代码随着模态框数量增加,大量重复出现。

理论上可以使用API调用的方式代替,但是自由度不足(一些默认样式和我们UI不一样)

像这样的代码要如何优化比较好呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦在深巷 2022-09-20 00:20:16
const Dialog = ({open = false}) => {
            return (
                <dialog open={open} mode>
                    <p>11</p>
                </dialog>
            );
        }

        const useDialog = (isOpen) => {
            const [open, setOpen] = useState(isOpen);
            const dialogInstance = useMemo(() => <Dialog open={open}/>, [open]);
            const container = useRef(null);
            useEffect(() => {
                container.current = document.createElement('div');
                document.body.appendChild(container.current);
            }, [])
            useEffect(() => {
                if (container.current) {
                    ReactDOM.render(dialogInstance,container.current);
                }
            }, [dialogInstance]);
            const showDialog = useCallback(() => {
                setOpen(true);
            }, []);
            const hideDialog = useCallback(() => {
                setOpen(false);
            }, []);
            return [showDialog, hideDialog];
        }

        const App = props => {
            const [showDialog, hideDialog] = useDialog(true);
            return(
                <div>
                    <div onClick={showDialog}>open</div>
                    <div onClick={hideDialog}>close</div>
                </div>
            )
        }
        ReactDOM.render(<App />, document.querySelector('#container'));

写个hooks 类似这样?

薄荷→糖丶微凉 2022-09-20 00:20:16

避免过度封装,对于无法或没必要封装的内容,重复不一定是坏事,便于后续维护和拓展。如果想提高效率可编写模板代码。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文