如何从 Wordpress Gutenberg ColorPicker 获取颜色以正确保存?

How do I get the color from Wordpress Gutenberg ColorPicker to save correctly?

在 wordpress 中创建 Gutenberg 块类型时,我希望将颜色值保存在属性中,并且 ColorPicker 在刷新页面时以该颜色开始,但保存的颜色值似乎没有加载到页面 refresh/reload 上的 ColorPicker。如何让 ColorPicker 从保存的颜色开始?

const { registerBlockType } = wp.blocks;
const { createElement, Fragment } = wp.element;
const { InspectorControls } = wp.editor;
const { ColorPicker, PanelBody, PanelRow } = wp.components;
const { __ } = wp.i18n;

registerBlockType( 'test/colorpicker', {
    title: 'ColorPicker',
    category: 'layout',
    description: __( 'Testing the ColorPicker' ),
    icon: 'universal-access-alt',
    attributes: {
        color: {
            type: 'array',
        }
    },
    example: {},
    edit: ( { attributes, setAttributes, className } ) => {
        const { color } = attributes;
        return  ([
                <InspectorControls>
                    <Fragment>
                        <PanelBody
                            title={ __('Color Picker', 'test' ) }
                            initialOpen={ true }
                        >
                            <PanelRow>
                                <ColorPicker 
                                  color={ color }
                                  onChangeComplete={ (value) => setAttributes({color:value}) }
                                />
                            </PanelRow>
                        </PanelBody>
                    </Fragment>
                </InspectorControls>,
                <div
                    className={ className }
                    style={{
                        height: '400px'
                    }}
                >
                </div>
                ])
    },
    //Render in PHP
    save: (props) => { return null }
} );

ColorPicker 组件传递的值是对象而不是数组,因此您的编辑功能无法正确接收它。这也让我感到困惑。控制台从 ColorPicker 的 onChangeComplete 函数记录 value 会给你一个提示。

您需要在注册您的块时更改属性规范,如下所示:

attributes: {
    color: {
        type: 'object' // <== Not 'array'
    }
}

希望对您有所帮助!