【问题标题】:how write a type definition for a HoC using flow如何使用流为 HoC 编写类型定义
【发布时间】:2017-08-25 18:54:27
【问题描述】:

我正在尝试为 HoC 编写一个流类型,它将返回一个组件并向它添加一个 prop isVisible

type VisibleProps = {isVisible: boolean}

const VisibleComp = <P, S>(Component: Class<React.Component<void, P, S>>)
  : Class<React.Component<void, P&VisibleProps, S> => 
  class WrappedComponent extends React.Component<void, P&VisibleProps, S> {
      render() {
          return <Component {...this.props} isVisible={true} />
      }
  }

我尝试了几件事但没有成功:(

【问题讨论】:

    标签: reactjs flowtype higher-order-components


    【解决方案1】:

    挖掘流程问题,我发现这个问题解决了我的问题 https://github.com/facebook/flow/issues/3241

    希望对你有帮助。

    // @flow
    import React from 'react';
    
    type Visible = {isVisible: boolean}
    type WrappedProps<P,Visible> = P & Visible  
    
    const injectVisible = <P: Object>(
      Component: Class<React.Component<*, WrappedProps<P, Visible>, *>>
    ) => class VisibleHoC extends React.Component<*, P, Visible> {
          state: Visible
          render() {
              return <Component {...this.props} isVisible={true} />
          }
      }
    
    class Component extends React.Component {
      props: Visible
      render() {
        return <div> {this.props.isVisible ? 'visible' : 'hidden'}</div>
      }
    }
    
    const VisibleComponent = injectVisible(Component)
    

    【讨论】:

    • 在我看来,您实际上并没有对injectVisible 是否正确地将所需的isVisible 属性添加到包装的Component 进行类型检查。如果你删除isVisible={true},它不会抛出任何流错误,即使VisibleComponent 根本不会收到isVisible 属性。我正在尝试自己了解如何正确地输入 HOC,所以我很想了解更多关于您的方法以及我是否误解了某些内容。
    • 仅供参考,我在这里有一些相关的问题:stackoverflow.com/questions/43267391/…
    • 你是对的 它只对传递给 HoC 的组件进行类型检查。我的第一个解决方案意味着使用 $Diff

      键入 Hoc 组件但不起作用(可能与 $Diff 错误有关)

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多