mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
56 lines
2.0 KiB
JavaScript
56 lines
2.0 KiB
JavaScript
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*
|
|
* @providesModule ReactNativeTagHandles
|
|
*
|
|
*/
|
|
'use strict';
|
|
|
|
var _prodInvariant = require('./reactProdInvariant');
|
|
|
|
var invariant = require('fbjs/lib/invariant');
|
|
|
|
/**
|
|
* Keeps track of allocating and associating native "tags" which are numeric,
|
|
* unique view IDs. All the native tags are negative numbers, to avoid
|
|
* collisions, but in the JS we keep track of them as positive integers to store
|
|
* them effectively in Arrays. So we must refer to them as "inverses" of the
|
|
* native tags (that are * normally negative).
|
|
*
|
|
* It *must* be the case that every `rootNodeID` always maps to the exact same
|
|
* `tag` forever. The easiest way to accomplish this is to never delete
|
|
* anything from this table.
|
|
* Why: Because `dangerouslyReplaceNodeWithMarkupByID` relies on being able to
|
|
* unmount a component with a `rootNodeID`, then mount a new one in its place,
|
|
*/
|
|
var INITIAL_TAG_COUNT = 1;
|
|
var ReactNativeTagHandles = {
|
|
tagsStartAt: INITIAL_TAG_COUNT,
|
|
tagCount: INITIAL_TAG_COUNT,
|
|
|
|
allocateTag: function () {
|
|
// Skip over root IDs as those are reserved for native
|
|
while (this.reactTagIsNativeTopRootID(ReactNativeTagHandles.tagCount)) {
|
|
ReactNativeTagHandles.tagCount++;
|
|
}
|
|
var tag = ReactNativeTagHandles.tagCount;
|
|
ReactNativeTagHandles.tagCount++;
|
|
return tag;
|
|
},
|
|
|
|
assertRootTag: function (tag) {
|
|
!this.reactTagIsNativeTopRootID(tag) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expect a native root tag, instead got %s', tag) : _prodInvariant('19', tag) : void 0;
|
|
},
|
|
|
|
reactTagIsNativeTopRootID: function (reactTag) {
|
|
// We reserve all tags that are 1 mod 10 for native root views
|
|
return reactTag % 10 === 1;
|
|
}
|
|
};
|
|
|
|
module.exports = ReactNativeTagHandles; |