我需要在其父组件中调用子函数。我该怎么办?在React 15的上一篇文章中,我可以使用ref来调用子函数。但是不知道如何使用挂钩和功能组件。
function Child(props) {
function validate() {
// to validate this component
}
return (
<>Some code here</>
)
}
function Parent(props) {
const refs = useRef([]);
const someData = [1,2,3,4,5];
function validateChildren() {
refs.current.forEach(child => {
child.current.validate(); // throw error!! can not get validate function
});
}
return (
<>
<button onClick={validateChildren}>Validate</button>
{
someData.map((data, index) => {
return <Child ref={ins => refs.current[index] = ins} />
})
}
</>
)
}
我的实际要求是: 1.可以添加多个选项卡,根据用户的行为删除 2.单击选项卡父级中的一个按钮以触发验证 3.所有选项卡都需要进行自我验证,在其选项卡中显示错误消息并返回验证消息
答案 0 :(得分:1)
您可以将lst1 <- list(c("hiv3=0", "comdiab=0", "ppl=0"), c("fxet3=1", "hiv3=0",
"ppl=0"), c("fxet3=1", "escol4=0", "alcool=0", "tipores3=1"),
c("escol4=0", "alcool=0", "ppl=0", "tipores3=1"))
与forwardRef
结合使用。
从docs,
useImperativeHandle 自定义使用ref时公开给父组件的实例值。与往常一样,在大多数情况下应避免使用ref的命令性代码。 useImperativeHandle 应该与 forwardRef
一起使用
useImperativeHandle
在父组件中,您可以按以下方式访问子功能
const Child = React.forwardRef((props,ref) => {
//validate will be available to parent component using ref
useImperativeHandle(ref, () => ({
validate() {
// to validate this component
console.log("I'm clicked");
}
}));
return (
<>Some code here</>
)
})