reactjs - React:自定义 Ref(没有 DOM)
问题描述
几年来我一直在使用 React,今天我鼓励了一个非常独特的用例,我需要解决它。我需要自己做参考。有某些图书馆可以做到这一点,我还不知道他们是如何做到的。
所以基本上我需要做的是
const ref = useRef();
/**
where ref.reset(); will work
*/
<Menu ref={ref}/>
我的自定义组件:
const Menu = () => {
const reset = () => {
setValue(0);
}
return <CustomMenuComponent />
}
所以基本上我需要在父级中公开这个方法。我知道这可以通过状态来完成,并且应该这样做,我刚刚为我的问题添加了一个最小用例。所以基本上我需要在我的组件中公开一些方法,最好使用 refs。
解决方案
为此,有一个很少需要的useImperativeHandle
钩子。它允许您指定外部组件在将 ref 传递给您的函数组件时将获得哪些外部组件:
const Menu = React.forwardRef((props, ref) => {
const [value, setValue] = useState(0);
useImperativeHandle(ref, () => {
return {
reset: () => setValue(0)
}
}, []);
return <CustomMenuComponent />
});
// Usage:
const Example = () => {
const ref = useRef();
useEffect(() => {
ref.current.reset();
}, []);
return <Menu ref={ref} />;
}
您可以在此处查看有关此挂钩的更多信息。正如他们在文档中提到的那样,您应该尽可能避免使用 refs,尽管您似乎意识到这一点,因为您将自己描述为“一个非常独特的用例”。
推荐阅读
- vb.net - 是否有通过 vb.net 中的循环更改布尔变量的选项
- flutter - Flutter中如何在Appbar下添加Textfield
- jquery - jQuery 如何在选择器中使用数值变量
- typescript - TypeScript 中 Redux 操作的枚举
- hibernate - 从一个微服务调用一个方法到另一个微服务
- excel - “未找到方法或数据成员”错误消息
- angular - 取消订阅请求 Angular
- matrix - Power BI 自定义矩阵设计
- python - 当我尝试将 pat 作为列表传递时,了解 pandas.Series.str.replace 行为?
- mongodb - MongoDB - 如何从给定日期获取最近 30 天的日期,并且最后 30 天的日期应该是当前日期?