代码之家  ›  专栏  ›  技术社区  ›  Ishan Patel

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

  •  0
  • Ishan Patel  · 技术社区  · 8 年前

    我在组件外有以下功能

      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的值。

    这是完整的组件代码。

    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 回复  |  直到 8 年前
        1
  •  1
  •   Dakota    8 年前

    我不知道你想做的是否可行,但这绝对不是一个好主意。只需将状态的一部分作为参数传递给函数。

      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所说。

    使用设置状态编辑:

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