期待'这个'由类方法使用

时间:2017-05-29 19:43:03

标签: javascript reactjs ecmascript-6 eslint

在我的班上,eslint正在抱怨"期待'这个'由类方法&get; getUrlParams'

使用

这是我的班级:

class PostSearch extends React.Component {
  constructor(props) {
    super(props);
    this.getSearchResults();
  }

  getUrlParams(queryString) {
    const hashes = queryString.slice(queryString.indexOf('?') + 1).split('&');
    const params = {};

    hashes.forEach((hash) => {
      const [key, val] = hash.split('=');
      params[key] = decodeURIComponent(val);
    });

    return params;
  }

  getSearchResults() {
    const { terms, category } = this.getUrlParams(this.props.location.search);
    this.props.dispatch(Actions.fetchPostsSearchResults(terms, category));
  }

  render() {
    return (
      <div>
        <HorizontalLine />
        <div className="container">
          <Col md={9} xs={12}>
            <h1 className="aboutHeader">Test</h1>
          </Col>
          <Col md={3} xs={12}>
            <SideBar />
          </Col>
        </div>
      </div>
    );
  }
}

解决此问题或重构此组件的最佳方法是什么?

6 个答案:

答案 0 :(得分:18)

你应该将函数绑定到this,因为ESLint错误说"Expected 'this' to be used by class method 'getUrlParams'

getUrlParams = (queryString) => { .... }

因为您在渲染过程中没有使用getUrlParams(例如onClick())所以上面的技术很好,我们可以称之为&#34;在类属性中使用箭头函数&#34;。< / p>

还有其他绑定方式:

    构造函数this.getUrlParams=this.getUrlParams.bind(this) 中的
  • 绑定
  • 渲染中的箭头函数,例如onClick={()=>this.getUrlParams()},假设函数没有参数。
  • 使用ES6的
  • React.createClass没有意义:)

答案 1 :(得分:15)

这是一个ESlint规则,请参阅class-methods-use-this

您可以提取方法getUrlParams并将其放入帮助,或将其设为static

您还可以在方法中移动this.props.location.search,因此在没有参数的情况下调用this.getUrlParams()方法,因为您似乎只使用了一次。

因此,这可能看起来像:

getUrlParams() {
    const queryString = this.props.location.search;
    ...
    return params;
  }

最后一个选项是禁用此ESlint规则。

答案 2 :(得分:1)

getUrlParams = queryString => { ... }

答案 3 :(得分:0)

另一个用例可能是。

假设你有一个名为 handlePasswordKeyUp 的方法。功能的主体可以这样看。

handlePasswordKeyUp() {
  console.log('yes')
}

上面的代码会触发该错误。所以至少在身体功能

中使用 this
handlePasswordKeyUp(){
   this.setState({someState: someValue})
}

答案 4 :(得分:0)

我的解决方案是在类之外使用此函数并将此函数绑定到类。

HTTP/1.1 200 

a: 268409219

答案 5 :(得分:-5)

对此规则的可能破解。

getMoviesByID(){
  //Add a reference to this in your function.
  this.funcName = 'getMoviesByID';
}