React TypeScript中的可選布林類型props被認定為非布林類型的問題解析
P粉035600555
P粉035600555 2024-03-29 12:02:04
0
1
306

我遇到了一個奇怪的問題,我確定是遺漏了什麼。

這是我的Box函數/元件

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

所有的props都是布林值,預設值為false,而且都是可為空的(顯然)

但是我在控制台上仍然收到以下警告:

警告:接收到非布林屬性clickablefalse值。

我對每個props都收到了這個警告

我不明白如何創建這樣一個元件:

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

而不會收到這個警告。

我嘗試了很多方法,可能無法告訴你每一個方法。

P粉035600555
P粉035600555

全部回覆(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
    )} />
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板