我正在使用 MaterialUI,更具体地说是 TextField 组件,我想以某种方式装饰它以在组件级别处理验证状态。

我知道 React 中的 HOC,这是一种似乎非常适合此的模式。但是我必须返回一个匿名类,因此我无法像我应该的那样获得 TextField 组件的值,因为返回的类型是 _class 而不是 TextField

我是不是在 HOC 模式上做错了什么,或者这可能不是在不修改其原型(prototype)的情况下重用组件的最佳方式。任何帮助将不胜感激。

HOC 声明

export default function hocInputValidator( WrappedComponent ){
  return class extends Component{
    constructor(props){
      super(props);
    }

    handleChange(){
      console.log('Handling from HOC');
    }

    render(){
      return <WrappedComponent {...this.props}/>
    }
  }
}

装饰组件 的调用和导出
export default hocInputValidator(TextField);

当我尝试通过 refs 访问装饰组件时,类型是 _class 而不是 TextField

最佳答案

HOC 主要用于对示例登录的关注点进行横切。您的应用程序中的许多组件可能需要登录功能,因此您可以使用 HOC 动态包装它们。 HOC 只会包装传入它的任何组件。在您的情况下,我在您的代码中发现了一些问题。我已经在下面修复了它们。

export default function ( WrappedComponent ){
     class HocInputValidator extends Component{
        constructor(props){
          super(props);
        }

        handleChange(){
          console.log('Handling from HOC');
        }

        render(){
          return <WrappedComponent {...this.props}/>
        }
      }
      return HocInputValidator;

}

调用应该是这样的。
import inputValidator from './components/input_validator';

inputvalidator(TextField);

关于javascript - React HOC 返回一个匿名 _class,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43838948/

10-15 05:45