如何使用wp.data.subscribe显示/隐藏某个帖子格式(音频,视频和画廊)的块,我测试了此代码,并且在编写帖子内容时以及选择任何其他选项时触发了它,但是它触发了目标块书写时闪烁。

wp.data.subscribe(() => {

    var postFormat = wp.data.select('core/editor').getEditedPostAttribute('format');


    $('#blockAudio, #blockVideo, #blockGallery').hide();


    if( postFormat == 'gallery' ) {

      $('#blockGallery').fadeIn();

    }

});

最佳答案

wp.data.subscribe是Redux的store.subscribe的包装。
从Redux文档:

我的解释:按照设计,wp.data.subscribe每次在当前状态发生更改时都会被调用。在编辑器中编辑帖子时,状态会更改多次,因此每次都调用一次监听器功能是有意义的。我敢打赌,您应该检查自己的状态的相关部分是否已更改,然后再执行所需的操作。
因此,我认为您可以修改代码,如下所示:

const getPostFormat = () => wp.data.select('core/editor').getEditedPostAttribute('format');

// set the initial postFormat
let postFormat = getPostFormat();

wp.data.subscribe(() => {

    // get the current postFormat
    const newPostFormat = getPostFormat();

    // only do something if postFormat has changed.
    if( postFormat !== newPostFormat ) {

      // Do whatever you want after postFormat has changed
      if (newPostFormat == 'gallery') {
        $('#blockAudio, #blockVideo, #blockGallery').hide();
        $('#blockGallery').fadeIn();
      }

    }

    // update the postFormat variable.
    postFormat = newPostFormat;

});
资料来源:
  • https://redux.js.org/api/store/#subscribelistener
  • https://developer.wordpress.org/block-editor/packages/packages-data/#generic-stores
  • 关于javascript - 正确使用wp.data.subscribe,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52301472/

    10-11 12:33