按钮上的切换图标单击反应

Posted

技术标签:

【中文标题】按钮上的切换图标单击反应【英文标题】:Toggle Icon on Button click React 【发布时间】:2020-10-03 02:15:45 【问题描述】:

我试图在 React 应用程序中单击时切换按钮图标。我查看了控制台,点击时“togglePassword”的值正在改变,但按钮图标没有改变......如何纠正这个问题? 这是我的代码...

class Register extends Component 

    constructor() 
        super();
        this.state = 
            togglePassword: false
        ;

        this.onToggle = this.onToggle.bind(this);
    

    onToggle(e) 
      this.setState( togglePassword: !this.state.togglePassword )
    

    render() 
       return (
          <button onClick=this.onToggle type="button">
             
              this.state.togglePassword ? 
              <i className="fas fa-eye-slash"></i> : 
              <i className="fas fa-eye"></i>
             
          </button>
       );
    

我尝试的另一种方法如下,但是当我单击按钮时控制台给了我以下错误...

<button onClick=this.onToggle type="button">
           
            this.state.togglePassword &&
            (<i className="fas fa-eye-slash"></i>)
           
           
            !this.state.togglePassword &&
            (<i className="fas fa-eye"></i>)
                   
</button>

错误:未能在“节点”上执行“删除子节点”。要移除的节点不是该节点的子节点。

【问题讨论】:

按钮图标是什么意思? 【参考方案1】:

除了您提供的代码之外,可能还有其他内容,

在代码 sn-p 下方,这是您的代码的精确副本,并且工作正常:


class App extends React.Component 

    constructor() 
        super();
        this.state = 
            togglePassword: false
        ;

        this.onToggle = this.onToggle.bind(this);
    

    onToggle(e) 
      this.setState( togglePassword: !this.state.togglePassword )
    

    render() 
       return (
          <button onClick=this.onToggle type="button">
             
              this.state.togglePassword ? 
              "fa-eye-slash": 
              "fa-eye"
             
          </button>
       );
    


ReactDOM.render(<App />, document.getElementById('react-root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="react-root"></div>

工作演示:字体很棒

【讨论】:

我没有为我的按钮使用简单的文本,你已经这样做了。万一我们使用了一个很棒的字体图标,它就不起作用了…… 任何其他方法和使用字体真棒图标? 我还是不明白。我的和你的代码都是一样的,有什么区别??你能告诉我你做了什么吗? 我使用了他们网站的 font-awesome 官方 CDN,你做了什么? @Smile001,我刚刚在网上找到了带有 font-awesome 的演示,并将您的代码放入其中,它的工作,没有别的,您可以创建一个与本地相同的演示,然后可能是我可以帮你更多【参考方案2】:

试试这个:

 render() 
  const togglePassword = this.state
       return (
    <button onClick=this.onToggle type="button">
           <i className=`fas fa-eye$togglePassword?"-slash:""`></i>
     </button>)

【讨论】:

【参考方案3】:

这似乎对我使用 React Material MUI 有效

import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import ExpandLessIcon from '@mui/icons-material/ExpandLess';

...

const [anchorEl, setAnchorEl] = React.useState(null);

  const open = Boolean(anchorEl);
  const handleClick = (event) => 
    setAnchorEl(event.currentTarget);
  ;
  const handleClose = () => 
    setAnchorEl(null);
  ;

...

<Button id="fade-button"onClick=handleClick>
Text
anchorEl ? <ExpandLessIcon /> : <ExpandMoreIcon />
</Button>

【讨论】:

以上是关于按钮上的切换图标单击反应的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮上的关闭模式反应本机

使用按钮上的道具路由到新组件单击反应

从另一个线程更改按钮图标/切换按钮

从另一个线程更改按钮图标/切换按钮

当我单击网页上的按钮时生成 .mobileconfig 文件

如何使按钮内的图标像按钮一样工作(指针事件:无;不起作用)