状态更新时更改 FontAwesomeIcon (React.JS)

Change FontAwesomeIcon when state updated (React.JS)

我添加了一个从应用程序中滑出的边栏。当侧边栏滑出时,我想将侧边栏按钮 从 A 图标更改为 B 图标 。我想不通的是如何更改 Fontawesome 代码的状态?

我想将 A 图标 (<i className=" fa fa- reply fa-2x" aria-hidden="true"></i>) 更改为 B 图标 (<i className="fa fa-share fa-2x" aria-hidden="true"></i> )

我的部分代码如下。

class Category extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      isOpen: false
    };
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.setState({
      isOpen: !this.state.isOpen
    })
    console.log(!this.state.isOpen)
  }
  render() {
    const categoryStatus = this.state.isOpen ? "isopen" : "";
    const categoryContainer = this.state.isOpen ? "isopen" : "";
    return (
      <div>
        <div className="categoryContainer">
          <div className={categoryContainer}>
            <h3 >CATEGORIES</h3>
          </div>
          <button onClick={this.handleClick}>
            <i className="slideinButton fa fa-reply fa-2x" aria-hidden="true"></i>
          </button>
        </div>
        <div className={categoryStatus} id="category">
          <input className="categoryInput" type="text" value="Add Category" placeholder="Add Category" />
          <ul>
            <li>Greetings</li>
            <li>Main Switchboard</li>
            <li>Interjections</li>
          </ul>
        </div>
      </div>
    )
  }
}

由于您已经有一个控制滑块的状态变量,您可以使用它来确定应该显示什么图标。只需添加一个条件,即 returns 取决于该州的正确条件:

<button onClick={this.handleClick}>
  <i className={"slideinButton fa fa-" + (this.state.isOpen ? "share" : "reply") + " fa-2x"} aria-hidden="true"></i>
</button>

或者,如果您觉得它更具可读性:

<button onClick={this.handleClick}>
  {this.state.isOpen
    ? <i className="slideinButton fa fa-share fa-2x" aria-hidden="true"></i>
    : <i className="slideinButton fa fa-reply fa-2x" aria-hidden="true"></i>
  }
</button>

您可以像对 categoryStatuscategoryContainer 一样进行操作。

const icon = this.state.isOpen ? 'reply' : 'share'

<button onClick={this.handleClick}>
  <i className={`slideinButton fa fa-${icon} fa-2x`} aria-hidden="true" />
</button>

更好的方法是创建一个 Icon 组件,您可以在其中将 icon 道具发送给它(如 replyshare..),这样您可以在代码的不同位置重用相同的 Icon 组件。更不用说你用它写的代码更少了。