在高阶组件 (HOC) 中传递带有 props 的组件
Pass a Component with props, inside a Higher-Order-Component (HOC)
我参考了这个创建 React 高阶组件的例子,taken from this article。
我正在努力完全理解和使用这个 HOC。
interface PopupOnHoverPropType {
hoverDisplay: string;
}
const WithPopupOnHover = <P extends object>(BaseComponent: React.FC<P>): React.FC<P & PopupOnHoverPropType> => ({ hoverDisplay, ...props }: PopupOnHoverPropType) => {
const [displayMsg, setDisplayMsg] = useState<boolean>(false);
const toggleDisplayMsg = () => {
setDisplayMsg(displayMsg);
};
return (
<div onMouseEnter={() => setDisplayMsg(true)}>
<div className={`${hoverDisplay} popup`} onClick={toggleDisplayMsg}/>
<BaseComponent {...props as P} />
</div>
)
};
以上代码我的理解是:
我们定义了一个名为WithPopupOnHover
的HOC,
它需要一个 React 组件 (BaseComponent)。
BaseComponent 自带 props(简称 P)
returns 一个新的 React 组件,
它采用道具 P 和 PopupOnHoverPropType
.
内的道具
如何使用这个 HOC?
以下尝试给出了输入过多参数的打字稿错误:
const enhanced = WithPopupOnHover(Modal);
const m = Enhanced(a,b,c, "up");
Modal React 组件具有以下 props 结构:
const Modal: React.FC<{
a: string;
b(): void;
c(locationData: customType): void;
}> = { ... }
看来您只是忘记了对象括号。 React 组件都采用单个 props 对象参数。
const Enhanced = WithPopupOnHover(Modal);
const m = Enhanced({ a, b, c });
我参考了这个创建 React 高阶组件的例子,taken from this article。
我正在努力完全理解和使用这个 HOC。
interface PopupOnHoverPropType {
hoverDisplay: string;
}
const WithPopupOnHover = <P extends object>(BaseComponent: React.FC<P>): React.FC<P & PopupOnHoverPropType> => ({ hoverDisplay, ...props }: PopupOnHoverPropType) => {
const [displayMsg, setDisplayMsg] = useState<boolean>(false);
const toggleDisplayMsg = () => {
setDisplayMsg(displayMsg);
};
return (
<div onMouseEnter={() => setDisplayMsg(true)}>
<div className={`${hoverDisplay} popup`} onClick={toggleDisplayMsg}/>
<BaseComponent {...props as P} />
</div>
)
};
以上代码我的理解是:
我们定义了一个名为WithPopupOnHover
的HOC,
它需要一个 React 组件 (BaseComponent)。
BaseComponent 自带 props(简称 P)
returns 一个新的 React 组件,
它采用道具 P 和 PopupOnHoverPropType
.
如何使用这个 HOC? 以下尝试给出了输入过多参数的打字稿错误:
const enhanced = WithPopupOnHover(Modal);
const m = Enhanced(a,b,c, "up");
Modal React 组件具有以下 props 结构:
const Modal: React.FC<{
a: string;
b(): void;
c(locationData: customType): void;
}> = { ... }
看来您只是忘记了对象括号。 React 组件都采用单个 props 对象参数。
const Enhanced = WithPopupOnHover(Modal);
const m = Enhanced({ a, b, c });