在下面的代码中,我尝试动态更新一个模板,该模板的属性数据在第一次useEffect调用之前不可用。在下面的代码中,第一次渲染当然有emoty属性并显示默认值。我可以跟踪代码并看到模板得到更新,但在使用修改后的模板调用useInnerBlocksProps后,数据仍然没有渲染。我错过了什么?
export default function Edit(props) {
const { PanelBody, PanelRow } = wp.components;
const { attributes, setAttributes } = props;
useEffect(() => {
setAttributes({'name': 'Edward Alan Thompson'});
setAttributes({'birth_date': '1 jan 1900'});
setAttributes({'death_date': '31 Dec 1990'});
setAttributes({'imageUrl': 'http://wordpressdevel.local/wp-content/uploads/2022/07/1.png'});
}, []);
const blockProps = useBlockProps( {
style:{minHeight: 40, width: '100%', border: "1px dotted red"}
});
const innerBlocksProps = useInnerBlocksProps(
{orientation: "horizontal"},
{template: [
[ 'core/columns', { columns: 2 }, [
[ 'core/column', {width: "20%"}, [
[ 'core/image', { url: attributes.imageUrl??''} ]
] ],
[ 'core/column', {}, [
[ 'core/heading', { content: attributes.name??''} ],
[ 'core/paragraph', { content: 'b. ' + attributes.birth_date??''} ],
[ 'core/paragraph', { content: 'd. ' + attributes.death_date??''} ]
] ],
]
]
]}
);
return (
<div >
<InspectorControls>
<PanelBody title="General" initialOpen={true}>
<PanelRow>
</PanelRow>
</PanelBody>
</InspectorControls>
<div {...blockProps}>
<div {...innerBlocksProps}></div></div>
</div>
);
}
我验证了最后一个渲染调用确实有正确的模板定义,只是不是屏幕上显示的内容。
1条答案
按热度按时间jjjwad0x1#
查看您的代码,问题似乎与
useInnerBlocksProps()
的调用方式有关:第一个参数期望blockProps
,其后是innerBlocks
内容,例如:编辑.js
参考:内部试验块:使用React钩子
我是在使用
<InnerBlocks .../>
测试您的template
定义本身,然后检查useInnerBlocksProps()
的预期之后得出这个结论的。