mirror of
https://github.com/status-im/react-native.git
synced 2025-01-10 09:35:48 +00:00
6c5024ec58
Summary: Concolidate the creation of the "update payload" into ReactNativeAttributePayload which now has a create and a diff version. The create version can be used by both mountComponent and setNativeProps. This means that diffRawProperties moves into ReactNativeAttributePayload. Instead of storing previousFlattenedStyle as memoized state in the component tree, I recalculate it every time. This allows better use of the generational GC. However, it is still probably a fairly expensive technique so I will follow it up with a diff that walks both nested array trees to do the diffing in a follow up. This is the first diff of several steps. @public Reviewed By: @vjeux Differential Revision: D2440644 fb-gh-sync-id: 1d0da4f6e2bf716f33e119df947c044abb918471
47 lines
1.3 KiB
JavaScript
47 lines
1.3 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 createReactNativeComponentClass
|
|
* @flow
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var ReactNativeBaseComponent = require('ReactNativeBaseComponent');
|
|
|
|
// See also ReactNativeBaseComponent
|
|
type ReactNativeBaseComponentViewConfig = {
|
|
validAttributes: Object;
|
|
uiViewClassName: string;
|
|
propTypes?: Object,
|
|
}
|
|
|
|
/**
|
|
* @param {string} config iOS View configuration.
|
|
* @private
|
|
*/
|
|
var createReactNativeComponentClass = function(
|
|
viewConfig: ReactNativeBaseComponentViewConfig
|
|
): ReactClass<any, any, any> {
|
|
var Constructor = function(element) {
|
|
this._currentElement = element;
|
|
|
|
this._rootNodeID = null;
|
|
this._renderedChildren = null;
|
|
};
|
|
Constructor.displayName = viewConfig.uiViewClassName;
|
|
Constructor.viewConfig = viewConfig;
|
|
Constructor.propTypes = viewConfig.propTypes;
|
|
Constructor.prototype = new ReactNativeBaseComponent(viewConfig);
|
|
Constructor.prototype.constructor = Constructor;
|
|
|
|
return ((Constructor: any): ReactClass);
|
|
};
|
|
|
|
module.exports = createReactNativeComponentClass;
|