typescript 使用我自己的组件作为子组件时,第一次单击时不会触发ListItemButton onclick

zvms9eto  于 2022-11-18  发布在  TypeScript
关注(0)|答案(1)|浏览(133)

我不理解为什么这个onclick关心孩子是什么以及它是如何工作的

<ListItemButton onClick={() => onClickResult(q)}>
       <Typography variant="body1">{highlighted}</Typography>
  </ListItemButton>

在这个例子中,使用了来自mui的版式,它作为aspect工作(第一次单击触发onClick)
但使用几乎相同的代码,但另一个孩子:

<ListItemButton
            onClick={() => onClickResult(q)}
          >
            <HighlightText text={highlighted} />
          </ListItemButton>

其中Highlighted在return()之前定义:

const HighlightText = ({ text }: { text: string }) => {
    const splitText = text.split('}');
    const hasHighlights = splitText.length > 1;
    if (!hasHighlights) {
      return <Typography variant="body1">{text}</Typography>;
    }
    return (
      <StyledHighlightText>
        <Typography variant="body1">{splitText[0].replace('{', '')}</Typography>
        <StyledHighlightTextBold variant="body1">
          {splitText[1]}
        </StyledHighlightTextBold>
      </StyledHighlightText>
    );
  };

和单击:

const onClickResult = (query: string) => {
    window.location.href = `${url}?q=${encodeURIComponent(
      query,
    )}&origin=PHRASE_SUGGEST`;
  };

现在我必须点击两次才能触发onClick。我看绝对没有理由让它需要2次点击而不是1次来触发点击

66bbxpm5

66bbxpm51#

我找到了一个解决方法:创建方法而不是组件

<ListItemButton
        onClick={() => onClickResult(q)}
      >
        {getHighlightText(highlighted)}
      </ListItemButton>

const getHighlightText = (text: string) => {
    const splitText = text.split('}');
    const hasHighlights = splitText.length > 1;
    if (!hasHighlights) {
      return <Typography variant="body1">{text}</Typography>;
    }
    return (
      <StyledHighlightText>
        <Typography variant="body1">{splitText[0].replace('{', '')}</Typography>
        <StyledHighlightTextBold variant="body1">
          {splitText[1]}
        </StyledHighlightTextBold>
      </StyledHighlightText>
    );
  };

我仍然不知道为什么使用组件方式不起作用

相关问题