警告:React 无法识别 DOM 元素上的 X prop

Rea*_*ing 22 javascript typescript ecmascript-6 reactjs

当我试图传递道具时,我收到此错误。非常基本的东西。

interface Props extends Omit<React.HTMLAttributes<HTMLElement>, 'color'>, ChakraProps {
  handleMoveAll: () => void
}

export const MyWrapper: FC<Props> = (props): JSX.Element => (
  <div {...props}>
    <IconBox label="Move All" onClick={props.handleMoveAll}>
      <MyIcon />
    </IconBox>
  </div>
)
Run Code Online (Sandbox Code Playgroud)

然后我MyWrapper在发出警告的父组件上调用该组件。

export const ParentComp: FC<{}> = (): JSX.Element => {
  const myFunction = () => console.log('Hit it')

  return (
      <MyWrapper handleMoveAll={() => myFunction()}>
         <p>Child Component</p>
      </MyWrapper>
  )
}
Run Code Online (Sandbox Code Playgroud)

警告:React 无法识别handleMoveAllDOM 元素上的 prop。如果您有意希望它作为自定义属性出现在 DOM 中,请将其拼写为小写handlemoveall。如果您不小心从父组件传递了它,请将其从 DOM 元素中删除。

如果我删除它,handleMoveAll={() => myFunction()}警告就会消失。

有任何想法吗?

Dyl*_*nSp 27

问题<div {...props}>在于MyWrapper;将handleMoveAllprop 添加到 div 上。你可以做的是这样的:

export const MyWrapper: FC<Props> = (props): JSX.Element => (
  const {handleMoveAll, ...rest} = props;
  <div {...rest}>
    <IconBox label="Move All" onClick={handleMoveAll}>
      <MyIcon />
    </IconBox>
  </div>
)
Run Code Online (Sandbox Code Playgroud)

handleMoveAll从传入的 props 中取出,同时仍将任何其他 props 传递到 div 中。

  • 为什么是数组而不是 `const { handleMoveAll, ...rest } = props` ? (2认同)