2017-05-29 43 views
10

被用来在我的课,eslint抱怨“预期‘这个’,由类方法‘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> 
    ); 
    } 
} 

什么是解决这个或重构这个组件的最佳方法?

+0

哪里出错点? – Li357

+0

这听起来像一个林肯错误。如果你不想要这个错误,你总是可以禁用linting规则。你会得到这个错误,因为'getUrlParams'可能只是模块范围中的一个辅助函数。 – loganfsmyth

+0

它本质上是一个辅助函数,重构和避免这个错误的最好方法是什么? –

回答

5

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

你可以提取方法getUrlParams,并把它诠释o 帮手,或使其成为static

您还可以做的是将this.props.location.search移动到方法中,因此调用方法this.getUrlParams()而不带参数,因为您似乎只使用它一次。

因此,这可能是这样的:

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

最后一个选项将禁用该ESlint规则。

+0

摆脱了这个错误,谢谢你的帮助。你知道为什么会出现这些错误,仅供参考? –

+0

我已经更新了我的答案;这是一个ESlint规则,请参阅http://eslint.org/docs/rules/class-methods-use-this。 – Ioan

+0

当您无法避免参数时,我们是否有任何永久修复? –

0

另一个用例可能是。

比方说,你有方法称为handlePasswordKeyUp。功能的主体可以被看作是这样的。

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

上面的代码会触发该错误。所以,至少使用这个身体机能内

handlePasswordKeyUp(){ 
    this.setState({someState: someValue}) 
} 
0

你应该功能结合到this作为ESLint错误说"Expected 'this' to be used by class method 'getUrlParams'

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