@saber2pr/react
Version:
react in Typescript.
40 lines (39 loc) • 1.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/*
* @Author: saber2pr
* @Date: 2019-12-10 20:01:34
* @Last Modified by: saber2pr
* @Last Modified time: 2019-12-10 22:00:33
*/
var ReactFiberHooks_1 = require("../react-reconciler/ReactFiberHooks");
var ReactContext_1 = require("./ReactContext");
var SuspenseContext = ReactContext_1.createContext({});
var lazy = function (lazyComponent) { return function (props) {
var Context = ReactFiberHooks_1.useContext(SuspenseContext);
var fallback = Context.fallback, result = Context.result;
var _a = ReactFiberHooks_1.useState(fallback), state = _a[0], setState = _a[1];
ReactFiberHooks_1.useEffect(function () {
//TODO: when it will unmount, cancel the render.
if (result) {
setState(result);
}
else {
lazyComponent(props).then(function (_a) {
var render = _a.default;
var result = render();
setState(result);
Context.result = result;
});
}
}, [Context.fallback]);
return state;
}; };
exports.lazy = lazy;
var Suspense = function (_a) {
var fallback = _a.fallback, children = _a.children;
var Context = ReactFiberHooks_1.useContext(SuspenseContext);
Context.fallback = fallback;
return children;
};
exports.Suspense = Suspense;