【发布时间】:2021-03-30 20:22:09
【问题描述】:
我有以下组件决定是否应根据用户权限呈现组件:
const Can = forwardRef(({ requiredPermissions, children }, ref): null | JSX.Element => {
const {
user: { role },
userPermissions,
} = useAuth();
return userHasPermission(role, userPermissions, requiredPermissions) ? children : null;
});
export default Can;
我需要做的是将ref 传递给在使用组件时将在Can 内的子组件。
我怎样才能做到这一点?
【问题讨论】:
-
我相信你需要使用
React.ChildrenAPI;有关示例,请参见 this SO question。 -
作为一个打字稿问题,您需要确保您传递的 ref 的类型是孩子可以接受的类型。如果孩子是
div,那么您必须将引用传递给HTMLDivElement。这很粗糙。如果children是一个函数,那就更容易了。<Can>{MyComponent}</Can>而不是<Can><MyComponent/></Can>因为您可以只调用孩子而不是克隆它。React.children通常似乎没有正确的 Typescript 类型。 -
谢谢琳达!我不介意将其转换为函数。您想尝试制定答案吗?我相信这将最接近我想要实现的目标。
-
@Sammy 我正在为如何使
Can通用化而苦苦挣扎。我可以让forwardRef的contents 变得通用,仅此而已。 tsplay.dev/Nl08GN
标签: reactjs typescript react-forwardref