Reactjs 如何在React中的classname字段中传递带参数的函数?

Reactjs 如何在React中的classname字段中传递带参数的函数?,reactjs,function,parameter-passing,jsx,classname,Reactjs,Function,Parameter Passing,Jsx,Classname,我的React项目中有以下组件。我要做的是向元素添加一个className属性。将其设置为getSortByClass()方法的返回值,并传入sortByOptionValue作为参数 import React from 'react'; import './SearchBar.css'; const sortByOptions = { 'Best Match': 'best_match', 'Highest Rated': 'rating', 'Most Reviewed': '

我的React项目中有以下组件。我要做的是向
  • 元素添加一个className属性。将其设置为getSortByClass()方法的返回值,并传入sortByOptionValue作为参数

    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 '';
      }
    }
    function handleSortByChange(sortByOption){
      this.setState({
         sortBy: sortByOption
       });
    }
    export class SearchBar extends React.Component{
        renderSortByOptions(){
          return Object.keys(sortByOptions).map(sortByOption => {
            let sortByOptionValue = sortByOptions[sortByOption];
            return <li className={getSortByClass(sortByOptionValue)} key={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;
    
    从“React”导入React;
    导入“/SearchBar.css”;
    常数排序选项={
    “最佳匹配”:“最佳匹配”,
    “最高评级”:“评级”,
    “审查次数最多”:“审查次数”
    }
    函数getSortByClass(sortByOption){
    if(this.state.sortBy===sortbyooption){
    返回“活动”;
    }
    否则{
    返回“”;
    }
    }
    功能handleSortByChange(排序选项){
    这是我的国家({
    sortBy:sortBy选项
    });
    }
    导出类搜索栏扩展React.Component{
    renderSortByOptions(){
    返回Object.keys(sortByOptions).map(sortByOptions=>{
    设sortByOptionValue=sortByOptions[sortByOption];
    return
  • {sortByOption}
  • ; }); } 建造师(道具){ 超级(道具); 此.state={ 术语:“”, 位置:“”, 糟糕的是:“最佳匹配”, }; } render(){ 返回(
      {this.renderSortByOptions()}
    走吧 ); } } 导出默认搜索栏;

    我收到错误:
    TypeError:设置classname字段后无法读取未定义的属性“state”。

    谢谢@Ajay Gaur。但是当我点击列表项时,我仍然没有激活类名。这是一个单独的问题。试着调试一下。看看你所等值的值是否相等谢谢@Ajay Gaur。但是当我点击列表项时,我仍然没有激活类名。这是一个单独的问题。试着调试一下。查看您要等值的值是否相等
    ....
    function getSortByClass(sortBy, sortByOption){
      if (sortBy === sortByOption) {
        return 'active';
      }
      else {
        return '';
      }
    }
    
    export class SearchBar extends React.Component{
        handleSortByChange = (sortByOption) => this.setState({ sortBy: sortByOption});
    
        renderSortByOptions(){
          const that = this;
    
          return Object.keys(sortByOptions).map(sortByOption => {
            let sortByOptionValue = sortByOptions[sortByOption];
            return <li className={getSortByClass(that.state.sortBy, sortByOptionValue)} key={sortByOptionValue}> {sortByOption} </li>;
          });
        }
        ....
    
    renderSortByOptions(){
              const that = this;
    
              return Object.keys(sortByOptions).map(sortByOption => {
                let sortByOptionValue = sortByOptions[sortByOption];
                return (
                   <li className={that.state.sortBy === sortOption ? 'active' : ''} 
                       key={sortByOptionValue}
                   > 
                       {sortByOption} 
                   </li>
               );
            });
         }