javascript - 在jsx中的渲染函数中编写条件语句

标签 javascript reactjs jsx

我的状态是{visibilityFilter: "completed"}{visibilityFilter: "todo"} 。基于此,我想为元素分配类名。像这样的事情,

<span {this.state.visibilityFilter=="completed"?className="active":className:""}>Completed</span>

但是它不起作用。我尝试了它的不同变体,

{<span this.state.visibilityFilter=="completed"?className="active":className:"">Completed</span>}

但是它们都不起作用。我知道如果我在 return 语句之外创建一个变量并在 HTML 中分配它,它就可以工作。像这样,

let classCompleted = this.state.visibilityFilter == "completed"? "active":"";

然后,

<span className={`$(classCompleted)`}></span>

但我想知道如何在 return 语句中评估类。

最佳答案

你已经很接近了,你只需将 className 部分放在外面即可:

<span className={this.state.visibilityFilter=="completed" ? "active" : ""} onClick={this.handleFilter.bind(this,'completed')}>Completed</span>
<小时/>

题外话:

每次在 onClick 中使用 bind 意味着每次渲染该元素时都会重新绑定(bind)。您可以考虑在组件的构造函数中执行一次:

class YourComponent extends React.Component {
    constructor(...args) {
        super(...args);
        this.handleFilter = this.handleFilter.bind(this);
        // ...
    }
    handleFilter() {
        // ...
    }
    render() {
        return <span className={this.state.visibilityFilter=="completed" ? "active" : ""} onClick={this.handleFilter}>Completed</span>;
    }
}

如果您在转译器中启用了类属性,则另一种选择是使其成为箭头函数(截至 2017 年 1 月,它们位于 Babel 的 stage-2 预设中) :

class YourComponent extends React.Component {
    // ...
    handleFilter = event => {
        // ...
    };
    render() {
        return <span className={this.state.visibilityFilter=="completed" ? "active" : ""} onClick={this.handleFilter}>Completed</span>;
    }
}

这个例子:

class YourComponent extends React.Component {
    constructor() {
      super();
      this.state = {
        visibilityFilter: ""
      };
    }
    handleFilter = event => {
      this.setState({
        visibilityFilter: "completed"
      });
    };
    render() {
        return <span className={this.state.visibilityFilter == "completed" ? "active" : ""} onClick={this.handleFilter}>Completed</span>;
    }
}
ReactDOM.render(
  <YourComponent />,
  document.getElementById("react")
);
.active {
  color: blue;
}
<div id="react"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

关于javascript - 在jsx中的渲染函数中编写条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41531950/

相关文章:

reactjs - SessionStorage 不会通过挂载时调用的 useEffect 更新状态

javascript - 字符串比较不符合预期

javascript - 在页面刷新或后退/前进浏览器导航时重置下拉菜单

javascript - 尽管 Semantic-React-UI 表单中存在错误状态,成功消息仍继续触发

reactjs - 什么时候在 React 中使用 Immutable.js 有意义?

javascript - 如何在 JSX 中使用 map 进行嵌套循环?

javascript - 在这个非常简单的虚拟应用程序上,错误的处理程序捕获了 Flux 操作,为什么?

javascript - 如何使用 Twitter Bootstrap 在图像上获取 div

javascript - D3 数据图 : Pass additional values related to data on click of country

javascript - React应用程序中自动脚本将js转换为jsx