如何在ReactJS中访问classname字段中方法的返回值?

时间:2017-11-30 16:49:06

标签: reactjs function return-value classname react-props

我在组件外面有以下功能

  function getSortByClass(sortByOption){
    if (this.state.sortBy === sortByOption) {
      return 'active';
    }
    else {
      return '';
    }
  }

我有一个返回以下功能的组件。

  return Object.keys(sortByOptions).map(sortByOption => {
    let sortByOptionValue = sortByOptions[sortByOption];

    return <li className={} key={sortByOptionValue} 
 onClick={ handleSortByChange.bind(this, sortByOptionValue)}> {sortByOption} </li>;
  });

我想知道如何在<li>标记classname的值中访问getSortByClass函数的返回值。

这是完整的组件代码。

import React from 'react';
import './SearchBar.css';

const sortByOptions = {
  'Best Match': 'best_match',
  'Highest Rated': 'rating',
  'Most Reviewed': 'review_count'
}
  function getSortByClass(sortByOption){
    if (this.state.sortBy === sortByOption) {
      return 'active';
    }
    else {
      return '';
    }
  }

export class SearchBar extends React.Component{
    renderSortByOptions(){
      const that = this;

    function handleSortByChange(sortByOption){
      this.setState({ sortBy: sortByOption});
      }

      return Object.keys(sortByOptions).map(sortByOption => {
        let sortByOptionValue = sortByOptions[sortByOption];
        return <li className={} key={sortByOptionValue} onClick={ handleSortByChange.bind(this, sortByOptionValue)}> {sortByOption} </li>;
      });
    }


    constructor(props) {
        super(props);
        this.state = {
          term: '',
          location: '',
          sortBy: 'best_match',
        };
    }
    render(){
      return (
      <div className="SearchBar">
        <div className="SearchBar-sort-options">
          <ul>
            {this.renderSortByOptions()}
          </ul>
        </div>
        <div className="SearchBar-fields">
          <input placeholder="Search Businesses" />
          <input placeholder="Where?" />
        </div>
        <div className="SearchBar-submit">
          <a>Lets Go</a>
        </div>
        </div>
      );
    }
  }

  export default SearchBar;

1 个答案:

答案 0 :(得分:0)

我不知道你想要做什么是可能的,但它绝对不是一个好主意。只需将您正在使用的状态部分作为参数传递给函数。

  function getSortByClass(sortBy, sortByOption){
    if (sortBy === sortByOption) {
      return 'active';
    }
    else {
      return '';
    }
  }

然后将您的电话改为

    return <li className={} key={sortByOptionValue} onClick={ handleSortByChange(this.state.sortBy, sortByOptionValue)}> {sortByOption} </li>;

如果该功能不必超出范围,只需将其放入组件中,如@mersocarlin所说。

使用setState编辑:

  getSortByClass(sortByOption){
    if (this.state.sortBy === sortByOption) {
      this.setState({styleClass: 'active' });
    }
    else {
      this.setState({styleClass: '' });
    }
  }