【发布时间】:2018-11-22 14:41:59
【问题描述】:
已有代码:
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:我使用双 lambda 的原因是因为它允许处理这样的情况:
const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => (foo: string) => {
...
}
与
<button onClick={handleClick('bar')} ... // foo === 'bar'
【问题讨论】:
标签: javascript reactjs typescript jsx tslint