我正在使用 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/