Analyse des Problems, dass optionale boolesche Typ-Requisiten in React TypeScript als nicht-boolesche Typen erkannt werden
P粉035600555
P粉035600555 2024-03-29 12:02:04
0
1
332

Ich bin auf ein seltsames Problem gestoßen und bin mir sicher, dass mir etwas fehlt.

Dies ist meine Box-Funktion/-Komponente

export interface BoxProps extends React.HTMLProps<HTMLDivElement> {
    padding?: boolean
    stretch?: boolean
    flex?: boolean
    column?: boolean
    clickable?: boolean
    gap?: boolean
}

function Box (props: BoxProps) {
    return <div className={clsx(
        'flexbox',
        props.column && 'column',
        props.stretch && 'stretch',
        props.padding && 'padding',
        props.flex && 'flex',
        props.clickable && 'clickable',
        props.gap && 'gap',
        props.className
    )} {...props} />
}

Box.defaultProps = {

    padding: false,
    stretch:  false,
    flex:  false,
    column:  false,
    clickable:  false,
    gap:  false,
}

export default Box

Alle Requisiten sind boolesch, der Standardwert ist falsch und alle können (natürlich) auf Null gesetzt werden

Aber ich erhalte immer noch die folgende Warnung auf der Konsole:

Warnung: Wert einer nicht booleschen Eigenschaft clickablefalse erhalten.

Ich bekomme diese Warnung für jede Requisite

Ich verstehe nicht, wie man eine solche Komponente erstellt:

<Box gap stretch>{children}</Box> 等同于 <Box gap={true} ...

ohne diese Warnung zu erhalten.

Ich habe viele Methoden ausprobiert und kann Ihnen möglicherweise nicht jede Methode nennen.

P粉035600555
P粉035600555

Antworte allen(1)
P粉128563140

这是因为 div 元素没有这些属性(padding、gap等)。

你应该在代码中删除 {...props} 部分。修改后的代码应该是这样的:

function Box (props: BoxProps) {
    return <div className={clsx(
        'flexbox',
        props.column && 'column',
        props.stretch && 'stretch',
        props.padding && 'padding',
        props.flex && 'flex',
        props.clickable && 'clickable',
        props.gap && 'gap',
        props.className
    )} />
}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage