javascript - 使用 TypeScript 动态加载 React 组件
问题描述
我在我的 Web 应用程序中使用 laravel,并在 laravel 本身提供默认设置时做出反应。
我已经在反应中安装了打字稿。现在我试图通过 html 页面在需要时动态加载我的所有组件。
我创建了一个修复类来加载组件并将组件名称作为数据组件传递。它仅与 react 完美配合,但是当我在其中添加 TypeScript 后它不起作用。
它显示错误 -
ERROR in C:\xampp\htdocs\we-translate\resources\js\LoadComponents.tsx
./resources/js/LoadComponents.tsx
[tsl] ERROR in C:\xampp\htdocs\we-translate\resources\js\LoadComponents.tsx(14,23)
TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'typeof import("C:/xampp/htdocs/we-translate/resources/js/AllComponents")'.
ERROR in C:\xampp\htdocs\we-translate\resources\js\LoadComponents.tsx
./resources/js/LoadComponents.tsx
[tsl] ERROR in C:\xampp\htdocs\we-translate\resources\js\LoadComponents.tsx(14,45)
TS2339: Property 'component' does not exist on type 'Readonly<{}> & Readonly<{ children?: ReactNode; }>'.
加载所有组件的类是load_component
. 刀片文件中的代码看起来像 -
<div class="load_content" data-component="Hello"></div>
我创建了一个导出所有组件的文件AllComponents.tsx
import * as React from "react";
import { Hello } from "./components/Hello";
export {
Hello
}
并创建了一个LoadComponents.tsx
将组件加载为 html 文件保存组件名称的文件 -
import * as React from "react";
import * as ReactDOM from "react-dom";
import * as Components from './AllComponents'
export default class LoadComponents extends React.Component {
constructor(props : any){
console.log(props);
console.log(Components);
super(props);
}
render() {
const Component = Components[this.props.component];
return Component && <Component {...this.props} />; // *showing error at this line*
}
}
if(document.querySelectorAll('.load_content')){
let holders = document.querySelectorAll('.load_content');
for(let i=0; i < holders.length; i++ ){
let item: any = holders[i];
// I am
ReactDOM.render(<LoadComponents {...(item.dataset)} />, holders[i]);
}
}
当不使用打字稿时,它非常有效。
解决方案
推荐阅读
- c - 通过 USB 与 Linux 上的 CDC ACM 设备通信
- python - 向量化列表理解中的嵌套 for 循环
- android - jacoco 代码覆盖率不适用于 Android 应用程序
- android - 当我单击电子邮件中的链接时如何在其他组件中路由
- python - 如何使用 Python 用连续的非分支线包围热图上的一些像素?
- jekyll - 为什么删除 yaml 前端会阻止 Jekyll 将 md 文件转换为 html
- laravel - 如何在 AWS 中设置 laravel cronjobs
- javascript - 如果在 jquery 的下拉列表中未选择值,则显示警报消息
- netlogo - 当创建额外的海龟时,海龟自己的变量值在不应该增加时增加
- node.js - 在生产服务器上部署时使用 socket.io 的聊天应用程序未连接