检测数据块是否已删除

时间:2021-12-30 作者:KittMedia

我目前正在为块编辑器制作滑块。虽然我使用自定义按钮添加幻灯片(这是一个块),但我可以检测何时添加了新块,以告知滑块脚本刷新,以便记录新创建的块(作为幻灯片)。

但是,如果我想使用常规;删除块(&Q);从块的工具栏菜单中的操作,我无法找到如何检测它。

我已经在深入研究代码,并得出结论,我必须在动作被调度时进行检测。然而,我对反应很陌生,因此不知道如何检测removeBlock 调度操作。

我曾想过订阅商店的更改,但我不知道该订阅哪个商店:

const unsubscribe = subscribe( () => {
    console.log( store.getState().lastAction ); // which store?
} );
这是正确的方法还是有更简单的方法?

1 个回复
最合适的回答,由SO网友:Casey Milne 整理而成

也许你会发现这个片段很有用。我仍在寻找一种更好的方法来做到这一点,但据我所知,块并不知道自己被删除了。相反,我们必须从上面监视这些块。如果父块类型具有子块,则可以订阅core/block editor并使用getBlocks()检查子块的长度,如果新长度小于旧长度,则表示已捕获到删除。

const getBlockList = () => wp.data.select( \'core/block-editor\' ).getBlocks();
  
let blockList = getBlockList();

wp.data.subscribe( () => {

  const newBlockList = getBlockList();

  if ( newBlockList.length < blockList.length ) {
    console.log( \'A block was removed!!\' );
  }

  blockList = newBlockList;

} );

相关推荐