ReactOwner

ReactOwner模块用于调用ReactCompositeComponent实例的attachRef、detachRef方法,向用户自定义组件ReactComponent实例添加或移除refs。被ReactRef调用。

 

'use strict';

var _prodInvariant = require('./reactProdInvariant');// 生产环境React形式带url报错 

// invariant(condition,format,a,b,c,d,e,f) condition为否值,替换format中的"%s",并throw error报错   
var invariant = require('fbjs/lib/invariant');

// 通过有无attachRef、detachRef方法,判断是否ReactCompositeComponent实例(用户自定义组件由其创建实例、挂载)
function isValidOwner(object) {
  return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');
}

var ReactOwner = {

  addComponentAsRefTo: function (component, ref, owner) {
    // 不是ReactCompositeComponent实例,报错
    !isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? 
      invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs.' 
        + ' You might be adding a ref to a component that was not created inside a component\'s' 
        + ' `render` method, or you have multiple copies of React loaded' 
        + ' (details: https://fb.me/react-refs-must-have-owner).') 
      : _prodInvariant('119') : void 0;

    // 向用户自定义组件实例添加refs
    owner.attachRef(ref, component);
  },

  removeComponentAsRefFrom: function (component, ref, owner) {
    // 不是ReactCompositeComponent实例,报错
    !isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? 
      invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs.' 
        + ' You might be adding a ref to a component that was not created inside a component\'s' 
        + ' `render` method, or you have multiple copies of React loaded' 
        + ' (details: https://fb.me/react-refs-must-have-owner).') 
      : _prodInvariant('119') : void 0;

    var ownerPublicInstance = owner.getPublicInstance();

    // 移除用户自定义组件实例的refs
    if (ownerPublicInstance && ownerPublicInstance.refs[ref] === component.getPublicInstance()) {
      owner.detachRef(ref);
    }
  }

};

module.exports = ReactOwner;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值