ค้นหาเว็บไซต์

reactjs - วิธีการนำเข้า React JSX จากไฟล์แยกอย่างถูกต้องใน Typescript 1.6


ฉันมีไฟล์ app.tsx ดังต่อไปนี้ที่ทำงานได้ดีโดยโหลดองค์ประกอบ App จาก React.Component และองค์ประกอบลูก Worklist จาก React.Component อีกตัวหนึ่ง (ทั้งสองคลาสถูกกำหนดในไฟล์ app.tsx เดียวกัน) ซึ่งกำลังรันใน Visual Studio พร้อมกับติดตั้ง Typescript 1.6 (เวอร์ชัน ECMAScript: ECMAScript 5, การคอมไพล์ JSX: React, ระบบโมดูล: CommonJS)

อย่างไรก็ตาม ผมต้องการแยกสองส่วนประกอบนี้ออกเป็นไฟล์แยกต่างหาก อย่างไรก็ตาม เมื่อผมยกเลิกการคอมเมนต์การ import ของ WorkList และลบคำนิยามคลาสของคอมโพเนนต์ WorkList จาก app.tsx - มันก็ล้มเหลวพร้อมกับข้อผิดพลาด:

ข้อผิดพลาด TS2604 ประเภทองค์ประกอบ JSX 'WorkList' ไม่มีตัวสร้างหรือสัญญาลักษณ์การเรียกใช้งานใด ๆ

นี่คือไฟล์ app.tsx ที่ใช้งานได้และไฟล์ worklist.tsx ที่ต้องการ

// app.tsx
import * as React from "react";
import * as ReactDOM  from "react-dom";
//import * as WorkList from "./worklist";

interface Props {
    foo: string;
}

class WorkList extends React.Component<Props, {}> {
    constructor(props: Props) {
        super(props);
    }
    render() {
        return <h2>WorkList!{this.props.foo} </h2>
    }
}
class App extends React.Component<Props, {}> {
    constructor(props: Props) {
        super(props);
    }
    public render() {
        return <WorkList foo="baz"></WorkList>
    }
}


ReactDOM.render(    
    React.createElement(App, { foo: 'bar' }),
    document.getElementById('app')
);




//worklist.tsx
import * as React from "react";

interface Props {
    foo: string;
}

class WorkList extends React.Component<Props, {}> {
    constructor(props: Props) {
        super(props);
    }
    render() {
        return <h2>WorkList!{this.props.foo} </h2>
    }
}

<WorkList foo="bar" />

วิธีที่ถูกต้องในการนำเข้า JSX ของลูกด้วย Typescript 1.6 คืออะไร?

นี่คือโค้ดที่ทำงานได้พร้อมคำตอบที่ถูกต้อง:

// app.tsx
import * as React from "react";
import * as ReactDOM  from "react-dom";
import WorkList from "./worklist";

interface Props {
    foo: string;
}

class App extends React.Component<Props, {}> {
    constructor(props: Props) {
        super(props);
    }
    public render() {
        return <WorkList foo="baz"></WorkList>
    }
}       
ReactDOM.render(

    React.createElement(App, { foo: 'bar' }),
    document.getElementById('app')
);

//worklist.tsx
import * as React from "react";

interface Props {
    foo: string;
}

export default class WorkList extends React.Component<Props, {}> {
    constructor(props: Props) {
        super(props);
    }
    render() {
        return <h2>WorkList!{this.props.foo} </h2>
    }
}

คำตอบ #1

ฉันคาดว่าคุณจำเป็นต้องส่งออกคลาส WorkList ในไฟล์ worklist.tsx อย่างถูกต้อง เช่น การส่งออกเป็นค่าเริ่มต้น:

export default class WorkList extend React.Component<Props, {}>

และจากนั้นนำเข้ามาใน app.tsx:

import WorkList from "worklist"

นี่ควรจะแก้ปัญหาของคุณได้

บทความที่เกี่ยวข้อง