alibaba / rax

🐰 Rax is a progressive framework for building universal application. https://rax.js.org
Other
8k stars 627 forks source link

[WIP]Feat Suspense #2307

Open chenjun1011 opened 2 years ago

chenjun1011 commented 2 years ago
CLAassistant commented 2 years ago

CLA assistant check
All committers have signed the CLA.

carlisliu commented 2 years ago

This feat makes component's defaultProps invalid, reproduce code:

import { createElement, useEffect, useState, useRef, PureComponent, lazy, Suspense } from 'rax';
import Text from 'rax-text';

class TextView extends PureComponent {
  static defaultProps = {
    text: 'default text'
  };

  render() {
    return <div>
      <Text>{this.props.text || 'no default value'}</Text>
    </div>
  }
}

const LazyTextView = lazy(() => {
  return new Promise(resolve => {
    setTimeout(() => resolve({ default: TextView }), 2000);
  })
});

function Loading() {
  return <Text>loading...</Text>
}

export default function Defer() {
  return <div>
    <Suspense fallback={<Loading />}>
      <TextView />
      <LazyTextView />
    </Suspense>
  </div>
}

output: default text no default value