【问题标题】:How to pass function with argument in classname field in React?如何在 React 的类名字段中传递带参数的函数?
【发布时间】:2018-05-08 18:32:35
【问题描述】:

我的 React 项目中有以下组件。我想要做的是向<li> 元素添加一个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;

设置类名字段后出现错误:TypeError: Cannot read property 'state' of undefined

【问题讨论】:

    标签: reactjs function parameter-passing jsx classname


    【解决方案1】:
    ....
    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>;
          });
        }
        ....
    

    将您的状态传递给getSortByClass 方法,因为它无法访问this,因为它是在类之外编写的。还要在您的类中写入handleSortByChange,因为它正在从this 访问setState。

    你也可以将代码美化为:

    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>
               );
            });
         }
    

    【讨论】:

    • 谢谢@Ajay Gaur。但是在单击列表项时,我仍然没有激活类名。
    • 那是一个单独的问题。尝试调试。看看你等价的值是否相等
    猜你喜欢
    • 2013-04-09
    • 2014-09-03
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2015-08-16
    • 2017-10-25
    相关资源
    最近更新 更多