我正在关注 styled-components 中的文档如何解释refs
在库的 v4 中使用:https ://www.styled-components.com/docs/advanced#refs
但是,这实际上似乎不起作用。ref prop 抱怨在创建 aReact.RefObject
并将其设置为ref
styled-component 时使用了错误的类型。
这是我到目前为止所做的:
const _Wrapper = styled.div`
position: relative;
height: 100%;
overflow: auto;
padding: 0px 48px;`;
然后我创建了一个 refObject 并在我的构造函数中初始化它:
this.flyoutRef = React.createRef();
现在,当将其设置为样式组件上的 ref 时,它不会启动并且还会显示错误:
<_Wrapper ref={this.flyoutRef} >{children}</_Wrapper>
TS显示的错误是这样的:
Type 'Ref<HTMLElement>' is not assignable to type 'string | (string & ((instance: HTMLDivElement | null) => void)) | (string & RefObject<HTMLDivElement>) | (((instance: Component<ThemedOuterStyledProps<DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, any>, any, any> | null) => void) & string) | ... 6 more ... | undefined'.
根据 styled-components 的文档,我正在实现它的显示方式。我什至尝试使用forwardRef
各种示例所示的方法,但错误仍然相同。
以下是我使用 forwardRef 构造样式组件的方式:
const Div = ({ innerRef, ...props}: any) => <div innerRef={innerRef} {...props} />;
const Forwarded = React.forwardRef((props, ref) => (
<Div {...props} innerRef={ref} />
));
const _Wrapper = styled(Forwarded)`
position: relative;
height: 100%;
overflow: auto;
padding: 0px 48px;
`;
我仍然像以前一样使用它:
<_Wrapper ref={this.flyoutRef} >{children}</_Wrapper>
现在显示此错误:
Type 'Ref<HTMLElement>' is not assignable to type '(string & ((instance: {} | null) => void)) | (string & RefObject<{}>) | (((instance: Component<ThemedOuterStyledProps<WithOptionalTheme<RefAttributes<{}>, any>, any>, any, any> | null) => void) & ((instance: {} | null) => void)) | ... 4 more ... | undefined'.
那么样式组件中的文档是错误的吗?还是我错过了需要在这里转发的东西?我非常感谢您澄清这里发生的事情,提前感谢您的帮助。
版本:
样式组件:4.1.3
反应:16.8.3