@ray-core/runtime
Version:
Ray 是一个全新的基于 React 的小程序开发框架
32 lines (31 loc) • 1.34 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import * as React from 'react';
export default function createNativeComponent(name) {
var NativeComponent = React.forwardRef(function (props, ref) {
// TODO 除微信小程序外,其他可能需要优化
// 所有在Ray中使用的原生序组件传递的属性(除事件属性外)都通过`__p__ `属性传递到组件内部
// 并在组件内部通过setData转成内部data
var _props = __assign(__assign({}, props), { __p__: props });
var refKey = process.env.REMAX_PLATFORM === 'ali' ? '__ref' : 'ref';
var vNodeRef = React.useRef();
_props[refKey] = React.useCallback(function (e) {
vNodeRef.current = e;
if (ref) {
typeof ref === 'function' ? ref(e) : (ref.current = e);
}
}, [ref]);
return React.createElement(name, _props, props.children);
});
NativeComponent.displayName = name;
return NativeComponent;
}