首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有模板返回块计数为零的InnerBlocks

具有模板返回块计数为零的InnerBlocks
EN

Stack Overflow用户
提问于 2020-02-07 22:25:46
回答 1查看 739关注 0票数 0

我正在尝试创建一个带有InnerBlocks模板的块。由于该块有一个模板,因此该块应该始终至少有一个子块。如果子计数达到0,那么我希望删除这个块,因为它将是空的。

我遇到的问题是,当第一次创建块时,"blockCount“的值是0,所以在创建它之前,它正在删除自己。这是getBlockCount的错误,还是在我检查块计数之前等待模板填充InnerBlocks的方法?

这是我的编辑功能,供参考。

代码语言:javascript
复制
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>
  )
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-24 16:24:48

在Github上提供的解决方案(并且运行良好)是将块长度保存到ref中,然后将useEffect用于监视更改,如果值返回到0,则删除块。

代码语言:javascript
复制
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>
  )
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60121938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档