6

我目前正在运行 React 16.3.1 和 Styled Components 3.2.5,并且在尝试使用 React.forwardRef 时遇到了问题。

我有一个 Input 组件,它由一个包含标签和输入字段的包装器 div 组成。但是,我希望能够将 ref 直接转发到输入字段,而不必通过主包装 div 遍历它。

const Input = React.forwardRef((props, ref) => (
  <Wrapper>
    <Label htmlFor={props.id} required={props.required}>
      {props.label}
    </Label>

    <InputField
      id={props.id}
      ...
    />
  </Wrapper>
));

这是我的组件的简化版本。但是,这会产生以下错误:

Uncaught Error: Cannot create styled-component for component: [object Object]

也许将 Styled Components 升级到 v4 会有所帮助?但是在升级之前有没有我还没有找到的解决方案?

谢谢你。

4

2 回答 2

2

正如相关问题中所解释的,有一个阻塞React Redux 问题,预计将通过此 PR关闭。

一种解决方法是使用在 React 16.3 之前使用的方法forwardRef并使用自定义 prop 而不是ref转发 refs:

const Input = ({forwardRef, ...props}) => (
  <Wrapper>
    <Label htmlFor={props.id} required={props.required}>
      {props.label}
    </Label>

    <InputField
      ref={forwardRef}
      id={props.id}
      ...
    />
  </Wrapper>
));
于 2018-10-23T09:21:21.030 回答
-3

为什么<Wrapper {...rest}>

我认为将 ref 传递给 Wrapper 是正确的方法:

<Wrapper ref={ref}>
于 2018-10-23T08:06:19.980 回答