setState不更新字体真棒图标

200*_*0OK 4 setstate font-awesome reactjs

我正在尝试在自己编写的复选框组件中动态呈现字体超赞图标。当我尝试在点击后用字体真棒图标更新状态时,它没有更新。我试图将渲染移到单独的功能,并尝试使用react-fontawesome,但没有任何帮助。状态正在更新,但超棒的字体图标与html中的svg代码相同。

...
state = {
 checked: this.props.checked
}

toggleCheck = () => {
  this.setState({ checked: !this.state.checked });  
};

render () {

  const iconUnchecked = 'far fa-square';
  const iconChecked = 'fas fa-check-square';
  const iconClass = this.state.checked ? iconChecked : iconUnchecked;

  return (
    <span onClick={this.toggleCheck}>
      <i className={iconClass} />
    </span>
  );
}
Run Code Online (Sandbox Code Playgroud)

200*_*0OK 5

据我了解,字体真棒js操作DOM,React操作虚拟DOM。当字体很棒的js做自己的事情时,React无法在状态更改后重新呈现它。我仍然在React 15上,也许这不是React 16中的问题。我刚刚找到了一种解决方案,可以将每个字体很棒的字体放在具有唯一键的div中。这样,React可以看到div必须更改,因为key已更改。

  • 这里的关键是将 `key` 属性放在包含元素上,而不是放在应用了 font-awesome 类的元素上。`&lt;button key='unique'&gt;&lt;i className={'fas' + 条件 ? 'fa-eye' : 'fa-edit'} /&gt;&lt;/button&gt;` (4认同)