【问题标题】:Font awesome 5: icon not switching when condition changes字体真棒 5:条件变化时图标不切换
【发布时间】:2018-09-20 04:25:04
【问题描述】:

我在 react.js 项目中使用 font awesome 5,并且无法在条件语句中进行图标切换。这是示例代码:

!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 类时,会发生切换。但是过渡非常尴尬--图标大小和位置偏移:

!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>

知道为什么会这样吗?

【问题讨论】:

    标签: javascript reactjs font-awesome font-awesome-5


    【解决方案1】:

    我已经对您的代码进行了试验,并意识到您正在使用 FontAwesome 的新 SVG JavaScript 库,它完全解释了这个问题。该库用于查看 DOM 和插入图标的代码在 React 中表现不佳。这也讨论了here

    要解决这个问题,你可以...

    【讨论】:

    • 就是这样。更改为 font awesome react 组件,它现在可以工作了。谢谢!
    【解决方案2】:

    不要为小改动重复代码。

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

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

    handleMicroClick(e){
      this.state.isRecording ? this.stop(e) : this.record(e);
    }
    <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>

    【讨论】:

    • @Alexis 不幸的是,这种方法不起作用。 isRecording == false时会显示麦克风按钮,但条件变化时不会切换到停止按钮。
    • 我可以 100% 向您保证,当您使用 setState 正确更新状态对象的 isRecording 属性时,图标会发生变化。问题一定出在代码的其他地方。
    • @NiklasHigi 我可以 100% 向您保证 isRecording 的状态正在毫无问题地更改。请查看我更新的帖子。
    • @NatashaC 你使用状态来更新你的变量吗? (this.state.isRecording)
    • @Alexis 是的,我使用setState。由于状态确实发生了变化。请查看我更新的帖子。
    猜你喜欢
    • 1970-01-01
    • 2019-09-04
    • 2021-06-14
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 2018-07-04
    相关资源
    最近更新 更多