2017-12-14 18 views
0

私が反応コンポーネントは、活字体で書かれています:活字体(ReactJS)コンパイルエラーが、これは暗黙的に型を持つ任意の

class App extends React.Component<props> { 

    constructor(props) { 
    super(props); 
    this.treeNavElement = this.treeNavElement.bind(this); 
    } 

    treeNavElement() { 
    return (
     <div></div> 
    ) 
    } 

    render() { 
    return (
     <div> 
     { 
      this.props.NavDataTree.map(function(elem) { 
      return <div key={elem.id} onClick={this.treeNavElement}>{elem.name}</div> 
      }, this) 
     } 
     </div> 
    ) 
    } 
} 

export default App; 

私の問題はtypescriptですコンパイラがあるため、この行のため、私に叫ぶことである:

[TS]「これは」暗黙のうちに、それが型注釈を持っていないので、「どんな」を入力していますと言っ

return <div key={elem.id} onClick={this.treeNavElement}>{elem.name}</div> 

mapの二番目のパラメータでのmap関数の外では、とthis.propsそれがうまく動作しますが、onClickthisの内側には失われます。

"noImplicitThis": falseを設定しても問題ありませんが、これを暗黙的にオフにする必要はありませんか?

+1

矢印機能を使用するとどうなりますか? –

+0

同じです。 – marchello

+0

@Explosino Pillsの意味は '... map((elem)=> {...})' – unional

答えて

1

functionを使用すると、thisです。です。

this.props.NavDataTree.map(function(elem) { }) 

あなたは、これが実行function(this: XXX) {}にあるか知っている場合は、thisを入力することができます。または矢印演算子を使用することができますので、は関数に伝播します

this.props.NavDataTree.map(elem => { this.XXX }) 
+0

これは完全にコンパイル時の問題です。私は 'noImplicitAny'でそれを抑制すると、私は実行時の問題はありません。私は「これ」が失われたとは思わない。このバインディングルールのためにコールバック関数本体にありますが、 'render()'の内部で 'map'の' thisArg'パラメータに 'this'を特に指定したので、それを利用できるはずです。 [mozilla docsから](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map):_thisArg コールバック実行時にこれとして使用する値。 だから、この 'はマップ内のコンパイル時に利用可能になるはずです。 – marchello

関連する問題