You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中点击IconButton切换MUI图标不生效的问题求助

问题原因

你代码里的判断逻辑存在语法错误:

if ({btnClicked}) {

这里你给btnClicked套了一层大括号,相当于创建了一个新对象{btnClicked: 你传入的props值},在JavaScript中所有对象的布尔判定结果都是true,所以不管你传入的btnClicked是true还是false,这个判断永远成立,只会渲染BorderColorIcon,自然不会切换到Undo图标。

修复方法

直接删掉判断里的大括号,直接用传入的props变量判断即可:

if (btnClicked) {

可选优化建议

你不需要把两个图标拆成两个返回JSX的独立函数,用三元表达式写更简洁,代码可读性更高:

import React from 'react';
import {IconButton } from '@material-ui/core';
import UndoIcon from '@mui/icons-material/Undo';
import BorderColorIcon from '@mui/icons-material/BorderColor'

const AddButton = ({onBtnClick, btnClicked}) => {
  return (
    <div>
      <IconButton
        aria-label="toggle icon"
        onClick={onBtnClick}
      >
        {btnClicked ? 
          <BorderColorIcon color="secondary" style={{cursor:'pointer'}} /> :
          <UndoIcon color="secondary" style={{cursor:'pointer'}} />
        }
      </IconButton>
    </div>
  )
}

export default AddButton

同时要确认父组件调用该组件时,onBtnClick回调中正确更新了btnClicked对应的状态值,参考父组件写法:

const [btnClicked, setBtnClicked] = useState(false)
// 调用组件
<AddButton 
  btnClicked={btnClicked}
  onBtnClick={() => setBtnClicked(prev => !prev)}
/>

内容的提问来源于stack exchange,提问作者avihaiB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:36:04