为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

陪伴而非守候 2023-03-10 15:23:57
我有一个父组件和一个子组件,子组件有一个按钮,我想在第一次单击后禁用它。这个答案在子组件中对我有用。但是点击时执行的函数现在存在于父组件中,我如何将属性传递给子组件?我尝试了以下但没有用。家长: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>  )}
查看完整描述

3 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

一般来说,refs 应该只作为 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>

  )

}


查看完整回答
反对 回复 2023-03-10
?
临摹微笑

TA贡献1982条经验 获得超2个赞

实际上,如果您修复Card组件中的拼写错误,它就会起作用。只需重命名hadnlBtnClickhandleBtnClick



查看完整回答
反对 回复 2023-03-10
?
慕神8447489

TA贡献1780条经验 获得超1个赞

您不需要按名称提及每个道具/属性,因为您可以Object Destructuring在此处使用 javascript。


const Home = () => {

  const [isButtonDisabled, setIsButtonDisabled] = useState(false)

  const handleButtonClick = () => {

    setIsButtonDisabled(true)

  }

  

  return (

    <>

      <Card isDisabled={isButtonDisabled} onButtonClick={handleButtonClick} />

    </>

  )

}



const Card = (props) => {

  return (

    <div>

      <button {...props}>Click me</button>

    </div>

  )

}

您还可以选择一些道具,并在子组件中以不同的方式使用它们。例如,请参见text下面的道具。


const Home = () => {

  const [isButtonDisabled, setIsButtonDisabled] = useState(false)

  const handleButtonClick = () => {

    setIsButtonDisabled(true)

  }

  

  return (

    <>

      <Card text="I'm a Card" isDisabled={isButtonDisabled} onButtonClick={handleButtonClick} />

    </>

  )

}



const Card = ({text, ...restProps}) => {

  return (

    <div>

      <button {...restProps}>{text}</button>

    </div>

  )

}


查看完整回答
反对 回复 2023-03-10
  • 3 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号