ここに記載されているようにAsyncCompomentクラスを実装することによって、Reactで経路を遅延ロードしようとしています。Code Splitting in Create React App以下は、チュートリアルからES6のasyncComponent機能である:遅延文字列をロードすると、文字列に一致するAsyncComponent
import React, { Component } from "react";
export default function asyncComponent(importComponent) {
class AsyncComponent extends Component {
constructor(props) {
super(props);
this.state = {
component: null
};
}
async componentDidMount() {
const { default: component } = await importComponent();
this.setState({
component: component
});
}
render() {
const C = this.state.component;
return C ? <C {...this.props} /> : null;
}
}
return AsyncComponent;
}
私はtypescriptですで、この機能を書いていると、コンポーネントが実際に遅延ロードされていることを確認することができます。私が直面する問題は、彼らがレンダリングされていないということです。私は、コンポーネントオブジェクトはcomponentDidMountフック常に不定であることを決定することができた:
//AsyncComponent.tsx
async componentDidMount() {
const { default: component } = await importComponent();
this.setState({
component: component
});
}
importComponent関数から返されるオブジェクトは、次の特性をもつ。
{
MyComponent: class MyComponent: f,
__esModule: true
}
私はcomponentDidMount方法を改変しましたこのオブジェクトの最初のプロパティ(MyComponentクラス)を取得します。この変更の後、私のプロジェクトは、コンポーネントの読み込みが遅れ、適切にレンダリングされます。
async componentDidMount() {
const component = await importComponent();
this.setState({
component: component[Object.keys(component)[0]]
});
}
私の最高の推測では、私はtypescriptですで正しくこの行を書いていないということです。
const { default: component } = await importComponent();
私はそうのようなasyncComponentメソッドを呼んでいる:
const MyComponent = asyncComponent(()=>import(./components/MyComponent));
誰もがどのように知っていますtypescriptでAsyncComponentを実装しますか? esModuleオブジェクトの0のインデックスを取得するだけの方法が正しいかどうかはわかりません。