我有一个父组件和一个子组件,子组件有一个按钮,我想在第一次单击后禁用它。这个答案适用于我的子组件。但是,单击时执行的函数现在存在于父组件中,如何将属性传递给子组件?我尝试了以下方法,但没有成功。
起源:
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>
)
}
一般来说,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