Существует существующий код:
const FooRoute: React.SFC<RouteProps> =
({ component: Component, ...rest }) => {
if (!auth.isFoo()) {
return <Redirect to={{ pathname: '/404' }} />;
}
if ('render' in rest) {
return (
<Route {...rest} render={rest.render} />
);
} else {
return (
Component
?
<Route
{...rest}
render={
(props: RouteComponentProps<{}>) => <Component {...props} />}
/>
: null
);
}
};
Здесь есть ошибка:
Теперь, как работает getComponent
функция будет выглядеть в этом случае?
Мысль о чем-то похожа на:
const getComponent = (props: RouteComponentProps<{}>) => () => (
<Component {...props} />
)
Тогда можно просто:
<Route
{...rest}
render={getComponent}
/>
Но в этом случае Component
не определено.Любые подсказки?
РЕДАКТИРОВАТЬ: Важное примечание - с использованием TypeScript.Поэтому нужно как-то передать Компонент в getComponent
.
EDIT2: причина, по которой я использовал двойную лямбду, заключается в том, что она позволяет обрабатывать такие ситуации:
const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => (foo: string) => {
...
}
с
<button onClick={handleClick('bar')} ... // foo === 'bar'