【问题标题】:How to properly pass typescript interface from React parent to child to grandchild如何正确地将打字稿接口从 React 父级传递到子级到孙子级
【发布时间】:2021-05-12 19:52:13
【问题描述】:

Typescript 新手,正在学习将其整合到 React 中。我正在努力解决的问题是将道具与道具类型一起向下传递两层的正确方法是什么?您是否在每个组件中构建相同的界面?你是在父组件中导出接口,在子组件和孙子组件中都导入吗?还是您只在父项中定义接口而不在子项和孙子项中键入检查?我问这个问题是因为我试图将 5 个道具从父组件传递给孙子,并且觉得我要么必须在子组件中编写/导入大量接口,只是为了将其传递给我的孙子,但必须这样做再次在孙子中使用它。如果我的问题不清楚,请道歉。

例如,在这种情况下,我们如何将“somePropType”接口向下传递给孙子?

export function ParentComponent(){
interface somePropType {
    firstname: string;
    lastname: string;
}

const someProp: somePropType = {
    firstname: 'foo',
    lastname: 'bar'
}

return (
    <ChildComponent someProp={someProp}/>
)
}

export function ChildComponent({ someProp }){
    return (
        <GrandchildComponent someProp={someProp}/>
    )
}

export function GrandchildComponent({ someProp }){
    return (
        <div>{`${someProp.firstname} ${someProp.lastname}`}</div>
    )
}

【问题讨论】:

    标签: reactjs typescript


    【解决方案1】:

    我要做的是:

    interface somePropType {
        firstname: string;
        lastname: string;
    }
    export function ParentComponent(){
        const someProp: somePropType = {
            firstname: 'foo',
            lastname: 'bar'
        }
    
        return (
            <ChildComponent someProp={someProp}/>
        )
    }
    
    interface ChildProps {
        someProp: somePropType
    }
    export function ChildComponent(props: ChildProps){
        const { someProp } = props
        return (
            <GrandchildComponent someProp={someProp}/>
        )
    }
    
    interface GrandchildProps {
        someProp: somePropType
    }
    export function GrandchildComponent(props: GrandchildProps){
        const { someProp } = props
        return (
            <div>{`${someProp.firstname} ${someProp.lastname}`}</div>
        )
    }
    

    基本上将道具类型传递给每个孩子。这样,VSCode 还将为您提供子组件的自动完成功能
    对于每一个组件,最好为组件中的 props 提供一个接口

    【讨论】:

    • 因此,如果您这样做并且每个组件都在其自己的文件中,您会从父组件导出接口并将其导入每个使用它的子/孙组件中吗?
    • 不。只需导出somePropType 以供其他组件使用。还要为每个组件创建一个新的props 接口
    • 如果您不为每个组件创建新的prop,而只在所有子组件中使用somePropType,会发生什么情况?
    猜你喜欢
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    相关资源
    最近更新 更多