代码之家  ›  专栏  ›  技术社区  ›  Avishay Matayev

正在获取redux的connect HOC的包装组件类型,以便与React一起使用。在不重新导入的情况下重新创建对象

  •  0
  • Avishay Matayev  · 技术社区  · 2 年前

    我有一个用react redux包装的简单组件,我有一个对该组件的引用 forwardRef: true 例如:

    // Button.tsx
    
    class Button extends React.Component {
      // ...
    }
    
    // ...
    
    export default connect(mapStateToProps, null, null, { forwardRef: true })(Button);
    

    现在我有了一个父组件,它呈现按钮组件

    // ButtonParent.tsx
    
    import Button from './Button';
    
    class ButtonParent extends React.Component {
      buttonRef: React.RefObject<Button>;
      public constructor(props) {
        this.buttonRef = React.createRef()
      }
    
      render() {
        return (
          <>
            <Button ref={this.buttonRef}/>
          </>
        );
      }
    }
    

    请注意,这是一个最小的简化版本,没有不必要的打字。

    问题在于 buttonRef 1.分类 Button (这是默认的从 Button.tsx )作为一个值,这是正确的。它还建议我使用 typeof ,这是不正确的。

    这个问题源于这样一个事实: 按钮 是来自redux的connect的HOC,但ref的类型是实际的 按钮 类组件。

    可以通过重命名和重新导出 按钮 组件,这样:

    // Button.tsx
    
    class _Button extends React.Component {
      // ...
    }
    
    // ...
    
    export default connect(mapStateToProps, null, null, { forwardRef: true })(_Button);
    

    然后使用 buttonRef: React.RefObject<_Button> .

    但我想知道是否有更简单/更干净的方法,也许redux会以某种方式导出包装组件的类型,而我只是不知道如何实现?

    0 回复  |  直到 2 年前