如果 React 中的变量==某物,如何将类分配给元素?

Ser*_*rov 5 html javascript reactjs

我是 React 新手,之前经常使用 Angular。在 Angular 中,根据变量分配一些类是尽可能简单的,如下所示:

<p ng-class="{warning: warningLevel==3, critical: warningLevel==5}">Mars attacks!</p>
Run Code Online (Sandbox Code Playgroud)

我如何使用 React 在模板中做类似的事情?

Bri*_*and 5

classSet 的替代方法通常是使用简单的对象查找。

var levelToClass = {
  "3": "warning",
  "5": "critical"
};

// ...
render: function(){
  var level = levelToClass[this.props.warningLevel] || "";
  return <p className={"message " + level}>Test</p>
}
Run Code Online (Sandbox Code Playgroud)

或者在某些情况下是三元:

render: function(){
  var level = this.props.warningLevel === 3 ? "warning"
            : this.props.warningLevel === 5 ? "critical"
            : "";
  return <p className={"message " + level}>Test</p>
}
Run Code Online (Sandbox Code Playgroud)


oko*_*kov 4

简短回答:使用classSet()http ://facebook.github.io/react/docs/class-name-manipulation.html

更长的答案:

这在 React 中并没有太大的不同,除了你编写了一个普通的旧 JavaScript,所以这里有很多控制。此外,React 已经有一个漂亮的插件,使它变得更加容易。在这种情况下,您的组件将如下所示:

var ClassnameExample = React.createClass({
  render: function() {
    var cx = React.addons.classSet;
    var classes = cx({
      "message": true,
      "warning": this.props.warningLevel === "3",
      "critical": this.props.warningLevel === "5"
    });
    return <p className={classes}>Test</p>;
  }
});
Run Code Online (Sandbox Code Playgroud)

这是工作示例:http://jsbin.com/lekinokecoge/1/edit ?html,css,js,output

只需尝试更改此处的值:

React.renderComponent(<ClassnameExample warningLevel="3" />, document.body);
Run Code Online (Sandbox Code Playgroud)