模板返回块计数为零的 InnerBlocks

InnerBlocks with template returning a block count of zero

我正在尝试使用 InnerBlocks 模板创建块。由于块有模板,块应该总是至少有 1 child。如果 child 计数达到 0,那么我想删除这个块,因为它是空的。

我 运行 遇到的问题是,当块首次创建时 "blockCount" 的值在一瞬间为 0,因此它会在创建之前自行删除。这是 getBlockCount 的错误,还是有办法在我检查块计数之前等待模板填充 InnerBlocks?

这是我的edit功能,供参考。

edit: props => {
  const { setAttributes } = props
  const { className } = props.attributes
  const { removeBlock } = useDispatch('core/block-editor')
  const { blockCount } = useSelect(select => ({
    blockCount: select('core/block-editor').getBlockCount(props.clientId)
  }))
  if (blockCount === 0) {
    removeBlock(props.clientId)
  }
  return (
    <div className={ className }>
      <InnerBlocks
        allowedBlocks={ ['my/block'] }
        template={ [['my/block']] }
        templateLock={ false }
        renderAppender={ false }
      />
    </div>
  )
}

Github 上提供的解决方案(效果很好)是将块长度保存到 ref,然后使用 Effect 观察变化,如果值 returns 为0.

edit: props => {
  const { setAttributes } = props
  const { className } = props.attributes
  const { removeBlock } = useDispatch('core/block-editor')
  const { blockCount } = useSelect(select => ({
    blockCount: select('core/block-editor').getBlockCount(props.clientId)
  }))
  const previousBlockCount = useRef(blockCount)
  useEffect(() => {
    if (previousBlockCount.current > 0 && blockCount === 0) {
      removeBlock(props.clientId)
    }
    previousBlockCount.current = blockCount
  }, [blockCount, props.clientId])
  return (
    <div className={ className }>
      <InnerBlocks
        allowedBlocks={ ['my/block'] }
        template={ [['my/block']] }
        templateLock={ false }
        renderAppender={ false }
      />
    </div>
  )
}