示例#1
0
 createShallowRenderer(/* options */) {
   const renderer = new ShallowRenderer();
   let isDOM = false;
   let cachedNode = null;
   return {
     render(el, context) {
       cachedNode = el;
       /* eslint consistent-return: 0 */
       if (typeof el.type === 'string') {
         isDOM = true;
       } else {
         isDOM = false;
         return withSetStateAllowed(() => renderer.render(el, context));
       }
     },
     unmount() {
       renderer.unmount();
     },
     getNode() {
       if (isDOM) {
         return elementToTree(cachedNode);
       }
       const output = renderer.getRenderOutput();
       return {
         nodeType: nodeTypeFromType(cachedNode.type),
         type: cachedNode.type,
         props: cachedNode.props,
         key: cachedNode.key || undefined,
         ref: cachedNode.ref,
         instance: renderer._instance,
         rendered: Array.isArray(output)
           ? flatten(output).map(elementToTree)
           : elementToTree(output),
       };
     },
     simulateEvent(node, event, ...args) {
       const handler = node.props[propFromEvent(event)];
       if (handler) {
         withSetStateAllowed(() => {
           // TODO(lmr): create/use synthetic events
           // TODO(lmr): emulate React's event propagation
           // ReactDOM.unstable_batchedUpdates(() => {
           handler(...args);
           // });
         });
       }
     },
     batchedUpdates(fn) {
       return fn();
       // return ReactDOM.unstable_batchedUpdates(fn);
     },
   };
 }
示例#2
0
 elementToNode(element) {
   return elementToTree(element);
 }