vnode.js 1.3 KB

1234567891011121314151617181920212223242526272829
  1. import _typeof from "@babel/runtime/helpers/esm/typeof";
  2. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  3. import { filterEmpty } from './props-util';
  4. import { cloneVNode } from 'vue';
  5. import warning from './warning';
  6. export function cloneElement(vnode) {
  7. var nodeProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  8. var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  9. var mergeRef = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
  10. var ele = vnode;
  11. if (Array.isArray(vnode)) {
  12. ele = filterEmpty(vnode)[0];
  13. }
  14. if (!ele) {
  15. return null;
  16. }
  17. var node = cloneVNode(ele, nodeProps, mergeRef);
  18. // cloneVNode内部是合并属性,这里改成覆盖属性
  19. node.props = override ? _objectSpread(_objectSpread({}, node.props), nodeProps) : node.props;
  20. warning(_typeof(node.props.class) !== 'object', 'class must be string');
  21. return node;
  22. }
  23. export function cloneVNodes(vnodes) {
  24. var nodeProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  25. var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  26. return vnodes.map(function (vnode) {
  27. return cloneElement(vnode, nodeProps, override);
  28. });
  29. }