首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字体令人敬畏的5:当条件改变时图标不切换

字体令人敬畏的5:当条件改变时图标不切换
EN

Stack Overflow用户
提问于 2018-04-10 13:55:12
回答 3查看 2.6K关注 0票数 1

我在react.js项目中使用了字体超赞5,在条件语句中使图标切换有问题。下面是示例代码:

代码语言:javascript
复制
!isRecording
&&
<div style={styles.recordButton} onClick={e => this.record(e)}>
    <span className="fa-layers  fa-4x">
      <div><i className="fas fa-circle " style={{color: Colors.mainOrange}}></i></div>
      <div><i className="fa fa-microphone  fa-inverse" data-fa-transform="shrink-6"></i></div>
    </span>
</div>
||
<div style={styles.recordButton} onClick={e => this.stop(e)}>
    <span className="fa-layers  fa-4x">
      <div><i className="fas fa-circle " style={{color: Colors.mainOrange}}></i></div>
      <div><i className="fas fa-stop  fa-inverse" data-fa-transform="shrink-6"></i></div>
    </span>
</div>

isRecording == true时,图标应该从fa-microphone更改为fa-stop。但这种转变并没有发生。麦克风图标保持不变。

奇怪的是,当我不使用要切换的按钮中的fa-layers类时,就会发生切换。但是这种转变是非常尴尬的--图标大小和位置变化:

代码语言:javascript
复制
!isRecording
&&
<div style={styles.recordButton} onClick={e => this.record(e)}>
    <span className="fa-layers  fa-4x">
      <div><i className="fas fa-circle " style={{color: Colors.mainOrange}}></i></div>
      <div><i className={isRecording ? `fa fa-stop  fa-inverse` : `fa fa-microphone  fa-inverse`} data-fa-transform="shrink-6"></i></div>
    </span>
</div>
||
<div style={styles.recordButton} onClick={e => this.stop(e)}>
    <span className=" fa-2x">
      <div key="stopRecord"><i className="fa fa-stop-circle fa-2x" style={{color: Colors.mainOrange}}></i></div>
    </span>
</div>

知道为什么会这样吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-10 15:36:24

我已经对您的代码进行了实验,并意识到您正在使用FontAwesome的新SVG JavaScript库,这完全解释了这个问题。库用于查看DOM和插入图标的代码并不能很好地发挥作用。这也是讨论这里

为了解决这个问题你可以..。

票数 3
EN

Stack Overflow用户

发布于 2018-04-10 14:04:27

不要为小改动复制代码。

如果您只需更改类/内容,请在className中使用表达式

并在onClick中更改被调用的方法,以检查isRecording的状态以调用正确的方法(stop/record)

代码语言:javascript
复制
handleMicroClick(e){
  this.state.isRecording ? this.stop(e) : this.record(e);
}
代码语言:javascript
复制
<div style={styles.recordButton} onClick={e => handleMicroClick(e)}>
     <span className="fa-layers  fa-4x">
        <div>
            <i className="fas fa-circle " style={{color: Colors.mainOrange}}>               </i>
        </div>
        <div>
            <i className={isRecording ? 'fa-microphone' : 'fa-stop'} data-fa-transform="shrink-6">
            </i>
        </div>
     </span>
</div>

票数 1
EN

Stack Overflow用户

发布于 2022-09-19 06:34:17

老问题,但我也有同样的问题,解决了没有使用建议的备选方案。

您可以使用key属性,强制响应更新组件。

代码语言:javascript
复制
!isRecording
&&
<div key={Math.random()} style={styles.recordButton} onClick={e => this.record(e)}>
    <span className="fa-layers  fa-4x">
      <div><i className="fas fa-circle " style={{color: Colors.mainOrange}}></i></div>
      <div><i className={isRecording ? `fa fa-stop  fa-inverse` : `fa fa-microphone  fa-inverse`} data-fa-transform="shrink-6"></i></div>
    </span>
</div>
||
<div key={Math.random()} style={styles.recordButton} onClick={e => this.stop(e)}>
    <span className=" fa-2x">
      <div key="stopRecord"><i className="fa fa-stop-circle fa-2x" style={{color: Colors.mainOrange}}></i></div>
    </span>
</div>

则如预期般运作;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49755509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档