Quasy模式组件不会隐藏自身

时间:2021-10-02 作者:Lovor

我有这个组件,它应该作为某种额外的输入对话框工作。在块的编辑功能中导入。

/**
 * Component for entering biography
 */

import { InnerBlocks } from \'@wordpress/block-editor\';
import { Button } from \'@wordpress/components\';
import { useState } from \'@wordpress/element\';



const BiographyModal = ({ name }) => {
    const [ isOpen, setIsOpen ] = useState(false);
    const modal =
        <div className="biography-modal">
            <h3>{ `Životopis ${ name }` }</h3>
            <InnerBlocks />
            <Button isDefault onClick={ () => setIsOpen({ isOpen: false }) }>
                Završi uređivanje
            </Button>
        </div>;

    return (
        <div>
            <Button isDefault onClick={ () => setIsOpen({ isOpen: true }) }>Uredi životopis</Button>
            { isOpen && modal }
        </div>
    )
}

export default BiographyModal;
它会在代码中较低的按钮上打开,但在代码中单击较高的按钮时不会关闭。当我在浏览器中使用React developer工具更改isOpen的状态时,它甚至不会关闭。起初我认为这是因为不允许卸下内部块或按钮,但在我移除这两个之后(并允许较低的按钮作为切换按钮使用(setIsOpen({ isOpen: ! isOpen })), 这仍然无法关闭。有什么线索吗?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

问题是你正在使用setIsOpen() 不正确。

您的代码初始化isOpenfalse, 您的代码暗示它可以是truefalse, 但这不是你设定的。这个setIsOpen() 功能更新isOpen 传递给它的值isOpen 属性,而不是布尔值。

当你打电话的时候setIsOpen({ isOpen: false }), 你没有设置isOpenfalse, 您正在将其设置为{ isOpen: false }. 你只需要通过truefalse:

<Button isDefault onClick={ () => setIsOpen(false) }>
请注意,这是React功能,与WordPress无关,因此您应该查看文档useState().

相关推荐