关于addComponent removeComponent问题

最近升级了引擎到2.4.10

然后发现切换头像没有显示头像.代码如下

let Test = cc.Class({
    extends: cc.Component,

    properties : {
        m_Head : {
            type : cc.Node,
            default : null,
        }
    },

    OnBtnClick1(){
        this.OnSelectHead( "head1" );
    },

    OnBtnClick2(){
        this.OnSelectHead( "head2" );
    },

    OnSelectHead( url ){
        let bundle = cc.assetManager.getBundle( "bundle" );
        if (bundle) {
            this.m_Head.removeComponent(cc.Sprite);
            let sprite = this.m_Head.addComponent(cc.Sprite);
            bundle.load(
                url,
                cc.SpriteFrame,
                this.onLoadSpr.bind(this, sprite)
            );
        }
    },

    onLoadSpr( sprite, err, spriteFrame ){
        if( err != null ) return;
        sprite.spriteFrame = spriteFrame;
    },
});

我把其中代码段

this.m_Head.removeComponent(cc.Sprite);
let sprite = this.m_Head.addComponent(cc.Sprite);

修改为

let sprite = this.m_Head.getComponent(cc.Sprite);
if (sprite == null) {
    sprite = this.m_Head.addComponent(cc.Sprite);
}

就正常.

原来版本2.4.6没有这个问题,升级引擎后出现的.
大家就不要吐槽不断addComponent removeComponent了,新人写的代码,没做代码审核.

我想问的是,为什么不断addComponent removeComponent会有这个问题.

这个刷新机制有点问题,下一帧才会刷新ui,我之前也碰到过

我记得removeComponent实际也只是调用.destroy()而已吧
而destroy是在下一帧才移除的,2.4.6没问题可能是运气好