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

修复Mui呈现的条件状态行为

邵奇
2023-03-14

我有一张Mui卡的清单。在卡悬停时,我希望一个浮动的动作按钮出现在卡内。我使用状态来实现这一点,问题是在状态改变期间悬停状态被应用于所有卡,这意味着按钮出现在每张卡上,而不是被指向/悬停的那张。我怎样才能控制这个按钮只显示在状态动作被触发的卡片上。

    const [state, setState] = useState({
        actionButton: false
    });
                        <Card
                          className="miniGraphCards"
                          onMouseOver={() => setState({ actionButton: true })}
                          onMouseOut={() => setState({ actionButton: false })}
                        >
                            {state && state.actionButton != false &&
                              <Fab>
                                <EmojiEmotionsIcon />
                              </Fab>}

请参阅可复制代码:您将注意到图形的重复重新渲染和按钮被应用于悬停时的所有卡片。

https://codesandbox.io/s/ellastic-kowalevski-j3wjx

共有1个答案

翟承志
2023-03-14

您正在保存app组件上的“状态”。您的布尔ActionButton将触发所有项。

因为您希望应用程序知道哪些项处于活动状态/悬停状态,所以可以考虑保存该的唯一值,这样您就可以确定是否处于悬停状态。

由于我从您前面的问题中仍然知道该应用程序是如何工作的,我建议为您悬停的保存data.symbol

<Card
    onMouseOver={() => setState({ actionButton: data.symbol })}
    onMouseOut={() => setState({ actionButton: null })}
>

在遍历所有卡片时,您可以检查curent是否需要如下图标:

{state && state.actionButton === data.symbol && (
    <Fab>
        <EmojiEmotionsIcon />
    </Fab>
)}

更新沙箱

 类似资料:
  • 如何使用JSX进行条件渲染? 例如,我这里有div,如果props的值为null,我想呈现文本“不知道”,否则如果props不等于null,则呈现props。 例如: 我试过了,但没有成功。知道我做错了什么吗? 提前感谢!

  • 我想动态呈现JSX,如下所示; 因此,我希望仅当“showSubTextAndIcon”为true时,才渲染该子文本和图标。现在,上述方法不起作用,我得到一个语法错误,说:; 相邻的JSX元素必须包装在一个封闭的标记中。你想要一个JSX片段吗 这工作,如果我添加一个包装列布局。然而,当show SubTextAndIcon是真的时,这会扰乱我的布局。 注意:列布局是从材料ui库派生的。

  • 问题内容: 我已经尝试了两个类组件: 并使用功能组件: 页面上显示的x值永远不会改变,或者似乎是随机改变的。是什么赋予了? 问题答案: 当您告诉React某些更改时,React仅知道使用其为状态管理提供的功能来重新渲染: 另外,功能组件应该是 纯 组件(没有副作用),因此要更新它们,React会给我们带来麻烦: 因此,您不能只是分配给一个变量并期望React知道:您必须使用它的更新函数,以便它知道

  • 对于在其生命周期的某个点隐藏的组件,呈现它的最佳方式是什么?1)渲染组件,但不显示它(显示:无)。2)只在需要时渲染组件。什么对性能更好?如果组件的道具和状态稍后更新,是否最好让组件存在,但隐藏在虚拟DOM中? 或者这个:

  • 我刚开始检查react表单。我遇到了一个问题,react在渲染中标记了我试图填充输入框标签的行。以下是我的应用程序代码: 在这一点上,我所要做的就是用名称输入框的标签为“您的名字”来呈现表单,如果没有输入名称,则让react用名称输入框的标签为“您需要输入您的名字”来重新呈现表单。 非常感谢任何援助。

  • 问题内容: 我使用setState更新html的一部分,但发现未呈现新的更新html。这是js fiddle 代码: HTML: js: 我省略了从服务器更新html的部分,但结果是相同的。如何让状态字符串呈现? 问题答案: 使用注入HTML作为一个字符串做出反应(但请注意,阵营将无法在它的虚拟DOM使用这个标记): http://jsfiddle.net/5Y8r4/11/ 用于执行此操作的AP