【发布时间】:2020-06-13 00:09:13
【问题描述】:
我需要使用 React Hooks 从父组件调用子组件中的函数。
我试图让这个问题适应我的用例React 16: Call children's function from parent when using hooks and functional component ,但我不断收到错误
TypeError: childRef.childFunction is not a function
我的父组件是这样的:
import React, { useRef, useEffect } from 'react';
import Child from './child'
function Parent() {
const parentRef = useRef()
const childRef = useRef()
const callChildFunction = () => {
childRef.current(childRef.childFunction())
}
useEffect(() => {
if (parentRef && childRef) {
callChildFunction();
}
}, [parentRef, childRef])
return (
<div ref={parentRef} className="parentContainer">
PARENT
<Child ref={childRef}/>
</div>
);
}
export default Parent;
我的子组件是这样的:
import React, { forwardRef, useImperativeHandle } from 'react';
const Child = forwardRef(({ref}) => {
useImperativeHandle(ref, () => ({
childFunction() {
console.log("CHILD FUNCTION")
}
}));
return (
<div className="childContainer">
CHILD
</div>
);
})
export default Child;
我做错了什么?
【问题讨论】:
-
有趣,不知道这个钩子。但是来自文档
imperative code using refs should be avoided in most cases。为什么不将状态提升到父级。还是使用 redux 或上下文挂钩在组件之间传递值和函数? -
childRef.current(childRef.childFunction())- 这是故意的吗?你不应该直接打电话给childRef.current.childFunction()吗? -
我想这样做的原因是我有一个子组件,它使用来自上下文的数据,并且也将数据作为输入,但是当上下文为时,上下文不会在子组件中刷新从父级重置 - 但用例非常特殊
-
我尝试了 childRef.current(childRef.childFunction()) 和 childRef.current.childFunction() - 都对我产生了相同的错误。我想我使用了第一个,因为我正在调整示例中的函数,并且他们在一组 refs 上使用了 forEach
标签: reactjs parent-child