提问者:小点点

如何将HTML属性传递给React中的子组件?


我有一个父组件和一个子组件,子组件有一个按钮,我想在第一次单击后禁用它。这个答案适用于我的子组件。但是,单击时执行的函数现在存在于父组件中,如何将属性传递给子组件?我尝试了以下方法,但没有成功。

起源:

const Home = () => {
  let btnRef = useRef();
  const handleBtnClick = () => {
    if (btnRef.current) {
        btnRef.current.setAttribute("disabled", "disabled");
    }
  }
  
  return (
    <>
      <Card btnRef={btnRef} handleBtnClick={handleBtnClick} />
    </>
  )
}

儿童:

const Card = ({btnRef, handleBtnClick}) => {
  return (
    <div>
      <button ref={btnRef} onClick={handleBtnClick}>Click me</button>
    </div>
  )
}

共2个答案

匿名用户

一般来说,REF只能作为React中的最后手段使用。React本质上是声明性的,因此与其让父对象“使”子对象处于禁用状态(这是您使用ref所做的),不如“说”子对象处于禁用状态(下面的示例):

const Home = () => {
  const [isButtonDisabled, setIsButtonDisabled] = useState(false)
  const handleButtonClick = () => {
    setIsButtonDisabled(true)
  }
  
  return (
    <>
      <Card isDisabled={isButtonDisabled} onButtonClick={handleButtonClick} />
    </>
  )
}


const Card = ({isDisabled, onButtonClick}) => {
  return (
    <div>
      <button disabled={isDisabled} onClick={onButtonClick}>Click me</button>
    </div>
  )
}

匿名用户

事实上,如果你修复了卡片组件中的打印错误,它是有效的。只需将hadnlBtnClick重命名为handlebtclick