ReactFragment

ReactFragment模块用于向子节点集合添加key值。

 

'use strict';

var _prodInvariant = require('./reactProdInvariant');

var ReactChildren = require('./ReactChildren');
var ReactElement = require('./ReactElement');

var emptyFunction = require('fbjs/lib/emptyFunction');
var invariant = require('fbjs/lib/invariant');
var warning = require('fbjs/lib/warning');

var numericPropertyRegex = /^\d+$/;
var warnedAboutNumeric = false;

// ReactFragment.create使用指定key值作为前缀为props.children添加key属性
// 示例:针对子节点没有key值,props.swapped变动将引起组件元素卸载、重新加载的绘制机制
// function Swapper(props) {
//   let children;
//   if (props.swapped) {
//     children = createFragment({
//       right: props.rightChildren,
//       left: props.leftChildren
//     });
//   } else {
//     children = createFragment({
//       left: props.leftChildren,
//       right: props.rightChildren
//     });
//   }
//   return <div>{children}</div>;
// }
var ReactFragment = {
  create: function (object) {
    // object非对象形式警告
    if (typeof object !== 'object' || !object || Array.isArray(object)) {
      process.env.NODE_ENV !== 'production' ? 
        warning(false, 'React.addons.createFragment only accepts a single object. Got: %s', object) 
        : void 0;
      return object;
    }

    // object不能接受ReactElement
    if (ReactElement.isValidElement(object)) {
      process.env.NODE_ENV !== 'production' ? 
        warning(false, 'React.addons.createFragment does not accept a ReactElement ' 
          + 'without a wrapper object.') 
        : void 0;
      return object;
    }

    // object不能接受React封装的dom节点
    !(object.nodeType !== 1) ? 
      process.env.NODE_ENV !== 'production' ? 
        invariant(false, 'React.addons.createFragment(...): Encountered an invalid child;' 
          + ' DOM elements are not valid children of React components.') 
        : _prodInvariant('0') 
      : void 0;

    var result = [];

    // key不允许为数值型
    for (var key in object) {
      if (process.env.NODE_ENV !== 'production') {
        if (!warnedAboutNumeric && numericPropertyRegex.test(key)) {
          process.env.NODE_ENV !== 'production' ? 
            warning(false, 'React.addons.createFragment(...): Child objects should have ' 
              + 'non-numeric keys so ordering is preserved.') 
            : void 0;
          warnedAboutNumeric = true;
        }
      }

      // 使用指定key值作为前缀为react节点添加key属性
      ReactChildren.mapIntoWithKeyPrefixInternal(object[key], result, key, emptyFunction.thatReturnsArgument);
    }

    return result;
  }
};

module.exports = ReactFragment;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值