Вы должны обернуть возвращаемый компонент вместо функции HOC:
const withLoader = (loadingProp) => (WrappedComponent) => {
return withStyles(styles)(class LoadIndicator extends Component {
render() {
return <h1>hello world</h1>
}
}}
}
export default (withLoader)
Вам потребуется использовать Type.GetMethod
, чтобы получить правильный метод, и Delegate.CreateDelegate
для преобразования MethodInfo
в делегат. Полный пример:
using System;
using System.Reflection;
delegate string MyDelegate();
public class Dummy
{
public override string ToString()
{
return "Hi there";
}
}
public class Test
{
static MyDelegate GetByName(object target, string methodName)
{
MethodInfo method = target.GetType()
.GetMethod(methodName,
BindingFlags.Public
| BindingFlags.Instance
| BindingFlags.FlattenHierarchy);
// Insert appropriate check for method == null here
return (MyDelegate) Delegate.CreateDelegate
(typeof(MyDelegate), target, method);
}
static void Main()
{
Dummy dummy = new Dummy();
MyDelegate del = GetByName(dummy, "ToString");
Console.WriteLine(del());
}
}
Mehrdad '
Еще проще в использовании:
public static MyDelegate GetByName(object target, string methodName)
{
return (MyDelegate)Delegate.CreateDelegate(typeof(MyDelegate),
target, methodName);
}
Обратите внимание, что CreateDelegate имеет перегрузку, которая принимает methodName для вас. Это было сделано с помощью .net 3.5 Sp1
static MyDelegate GetByName(object obj, string methodName)
{
return () => obj.GetType().InvokeMember(methodName,
System.Reflection.BindingFlags.InvokeMethod, null, obj, null);
}