0

我在InspectorControls区域中出现的块上有一个 ToggleControl 。默认情况下打开。当我尝试使用布尔类型设置它时,它不会正确保存状态。当试图切换它时,它会保持为“ on ”,但帮助文本会改变,就像它是off一样。保存更改并重新加载时,切换将回到on

const defaults: {
    autoplay: {
        type: 'boolean',
        meta: 'autoplay',
        default: true
    }
}

....  

<ToggleControl
    label={__('Autoplay')}
    help={attributes.autoplay ? __('Slideshow will start playing automatically', 'five') : __('User will have to cycle slideshow manually', 'five')}
    checked={(attributes.autoplay || defaults.autoplay.default)}
    onChange={() => {
        setAttributes({
            autoplay: !attributes.autoplay
        });
    }}
/>

但是,如果我将该输入更改为字符串并自己进行布尔处理,它会正确切换输入并保存状态:

const defaults: {
    autoplay: {
        type: 'boolean',
        meta: 'autoplay',
        default: true
    }
}

....

<ToggleControl
    label={__('Autoplay')}
    help={attributes.autoplay == 'true' ? __('Slideshow will start playing automatically', 'five') : __('User will have to cycle slideshow manually', 'five')}
    checked={(attributes.autoplay || defaults.autoplay.default) == 'true'}
    onChange={(nextValue) => {
        setAttributes({
            autoplay: nextValue ? 'true' : 'false'
        });
    }} 
/>

这可行,但在渲染时检查真实性时需要额外的字符。我可以通过使用一个数字并使用 0 和 1 来使这更容易一些,但这不是重点。我是否缺少布尔类型的某些内容,或者这是 Gutenberg 中的错误?

WP版本:5.1.1

4

1 回答 1

0

您在checked属性内的条件是错误的,因为它总是评估为true。虽然您的帮助文本没有任何条件,但切换帮助文本取决于attributes.autoplay您要更改的内部onChange属性。

所以解决方案是改变你的checked属性条件。

里面的属性registerBlockType可以通过在任何属性中使用defaultkey 来定义默认值,所以推荐的方法是使用它。(来自 wordpress 封面块的默认属性示例

于 2019-03-22T11:30:40.107 回答