首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React.js:如何从代码中关闭headlessui披露模式?

React.js:如何从代码中关闭headlessui披露模式?
EN

Stack Overflow用户
提问于 2021-07-29 15:43:11
回答 2查看 797关注 0票数 0

我在尝试关闭面板内的headlessui Disclosure modal时遇到问题。我的目标是在面板内有一个按钮,可以关闭模式。

我试图解决这个问题的方法是使用useRef手动完成,但它部分有效。

在第一次打开panel后,您可以关闭modal,但如果您尝试再次打开它,它将不起作用。

不知道如何解决这个问题。

任何帮助都将不胜感激。

Here is the codesandbox link

下面是代码

代码语言:javascript
复制
import { Disclosure } from "@headlessui/react";
import React, { useState, useRef } from "react";

import CloseIcon from "@material-ui/icons/Close";
import ExpandMoreIcon from "@material-ui/icons/ExpandMore";
const App = () => {
  const [isClosed, setIsClosed] = useState(false);

  const modalRef = useRef(null);
  const hideModalHandler = (e) => {
    e.preventDefault();
    modalRef.current?.click();
    setIsClosed(!isClosed);
  };

  return (
    <Disclosure>
      {({ open }) => (
        <div ref={modalRef}>
          <Disclosure.Button>
            <span>modal</span>
            <ExpandMoreIcon />
          </Disclosure.Button>

          {!isClosed && (
            <Disclosure.Panel>
              <CloseIcon onClick={hideModalHandler} />
              <div>name</div>
            </Disclosure.Panel>
          )}
        </div>
      )}
    </Disclosure>
  );
};

export default App;
EN

回答 2

Stack Overflow用户

发布于 2021-07-29 16:18:07

我没有使用过headlessui Disclosure,但我看到函数hideModalHandler实际上并没有隐藏,而是在切换。你是指setIsClosed(true)而不是setIsClosed(!isClosed)吗?

另外,在快速浏览文档之后,您是否尝试过从headlessui Disclosure使用close?你不需要useRef

票数 1
EN

Stack Overflow用户

发布于 2021-12-10 09:56:52

使用状态,并将披露按钮包装到一个带有onClick和一些ID字符串的DIV中,以标识必须打开的披露。如下所示(适用于多个公开):

代码语言:javascript
复制
const [keyOfOpenDisclosure, setKeyOfOpenDisclosure] = useState('')

const toggleDisclosure = (key: string) => {
    setKeyOfOpenDisclosure((prev) => (prev !== key ? key : ''))
}

...

<Disclosure>
    <div onClick={() => toggleDisclosure(someId)}>
        <Disclosure.Button>
            Text of disclosure button
        </Disclosure.Button>
    </div>
    <Transition
      show={someId === keyOfOpenDisclosure}
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68579028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档