我在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