当前位置: 首页 > 知识库问答 >
问题:

JSX元素的HOC-用包装元素渲染jsx

段干弘扬
2023-03-14

我想调用ReactJS HOC来包装JSX周围的工具提示。

呼叫应能如下所示:

withTooltip(JSX, "very nice")

因此,我创建了此函数:

js lang-js prettyprint-override">import React from "react";
import MUITooltip from "@material-ui/core/Tooltip";
import useStyles from "./index.styles";

const withTooltip = (Component, text: string) => (props) => {
  const classes = useStyles();
  return (
    <MUITooltip className={classes.root} title={text}>
      <Component {...props} />
    </MUITooltip>
  );
};
export default withTooltip;

电话:

import withTooltip from "commons/withTooltip/withTooltip";

  const dialogBtn =
    isOk &&
    withTooltip(
      <div className={classes.buttonWithLoader}>
        <OpenDialogButton
          variant={BaseButtonVariant.Icon}
          openDialogAttributes={areas.button.openDialogAttributes}
        />
      </div>,
      "Very nice",
    );
    
    
    return (
      <Fragment>
        {dialogBtn}
      </Fragment>
    );

它说:

函数作为React子函数无效。如果返回组件而不是从渲染返回组件,可能会发生这种情况。或者你想调用这个函数而不是返回它

如何解决?

共有1个答案

公西俊民
2023-03-14

当您传入JSX时,HOC接受一个组件参数。尝试用函数包装JSX,或传入呈现按钮的组件。

但是,在您的情况下,您可能希望控制组件中的工具提示文本。如果是这种情况,我不会为此使用HOC,而是使用包装组件。

function WithTooltip({ classes, text, children }) {
  return (
    <MUITooltip className={classes.root} title={text}>
      {children}
    </MUITooltip>
  );
}

export default WithTooltip;
const dialogBtn = isOk && (
  <WithTooltip text="Very nice">
    <div className={classes.buttonWithLoader}>
      <OpenDialogButton
        variant={BaseButtonVariant.Icon}
        openDialogAttributes={areas.button.openDialogAttributes}
      />
    </div>
  </WithTooltip>
);
 类似资料:
  • 主要内容:实例,实例,实例,实例元素是构成 React 应用的最小单位,它用于描述屏幕上输出的内容。 与浏览器的 DOM 元素不同,React 当中的元素事实上是普通的对象,React DOM 可以确保 浏览器 DOM 的数据内容与 React 元素保持一致。 将元素渲染到 DOM 中 首先我们在一个 HTML 页面中添加一个 id="example" 的 <div>: 在此 div 中的所有内容都将由 React DOM 来管

  • 因此,我试图用几个HTML输入创建一个动态表单。我有一个对象数组,其中包含应该呈现的的。目前,我能够呈现两个输入,如文本区域,但我如何处理收音机,复选框,选择连同他们的选项?任何帮助都将不胜感激。 请参见此CodeSandBox。

  • 我写了一些代码来呈现ReactJS中的重复元素,但我讨厌它有多丑。 有没有更好的方法来实现这一点? (我想在模板代码或类似的方法中嵌入循环。)

  • 问题内容: 我已经写了一些代码来渲染ReactJS中的重复元素,但是我讨厌它是如此丑陋。 有没有更好的方法来实现这一目标? (我想在模板代码或类似方法中嵌入循环。) 问题答案: 您可以将表达式放在大括号内。请注意,在已编译的JavaScript中,为什么在JSX语法中永远不可能发生循环;JSX相当于函数调用和加糖的函数参数。仅允许使用表达式。 (此外:请记住将属性添加到在循环内渲染的组件。) JS

  • 问题内容: 如何获得元素的渲染高度? 假设您的元素内部包含一些内容。内部的内容将扩大的高度。当您没有明确设置高度时,如何获得“渲染的”高度。显然,我尝试过: 有这样做的技巧吗?如果有帮助,我正在使用jQuery。 问题答案: 应该是 jQuery。这将以数字形式检索包装集中的第一个项目的高度。 尝试使用 仅当您首先将属性设置为有效。不是很有用!