javascript - Ladda React-komponent dynamiskt med TypeScript
Jag använder Laravel för min webbapplikation och React eftersom Laravel tillhandahåller standardinställning själv.
Jag har installerat TypeScript i React. Nu försöker jag ladda alla mina komponenter dynamiskt närhelst de behövs av HTML-sidan.
Jag har skapat en fix-klass för att ladda komponenten och skicka komponentnamnet som data-component. Det fungerade perfekt bara med React, men efter att jag lade till TypeScript i detta fungerar det inte.
Det visar fel detta -
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; }>'.
Klassen som laddar alla komponenter är load_component. Koden i blade-filen ser ut så här-
<div class="load_content" data-component="Hello"></div>
Jag har skapat en fil som exporterar alla komponenter AllComponents.tsx
import * as React from "react";
import { Hello } from "./components/Hello";
export {
Hello
}
och skapade en fil LoadComponents.tsx som laddar komponent som html-fil som håller komponentnamn -
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]);
}
}
Det fungerade perfekt när man inte använde TypeScript i det.