2017-11-23 6 views
0

私は[email protected]を使用しており、reactとreact-dom @ 15.6.2を使用しています。TSX + React:Uncaught TypeError:Menu.handleClickで未定義のプロパティ 'setState'を読み取ることができません

この問題をデバッグできないようです。 未知の型エラー:Menu.handleClickで未定義のプロパティ 'setState'を読み取ることができません。 これはthis.setState((prevState) => {

import * as React from "react"; 
import * as ReactDOM from 'react-dom'; 

import Monaco from './Monaco'; 
import shiftOverlayButtons from '../common/shiftOverlayButtons'; 

export interface Props { 

} 

export interface State { 
    isOpen: boolean; 
} 

export default class Menu extends React.Component<Props, State> { 

    constructor(props: Props) { 
     super(props); 
    } 
    public state: State = { 
     isOpen: false 
     }; 

    public render() { 
     return <button id="overlay-btn" className="menu-btn" onClick={this.handleClick}></button> 
    } 

    public handleClick(): void { 
     this.setState((prevState) => { 
      if(prevState.isOpen === false){ 
       this.openMenu(); 
       return { 
        isOpen: true 
       }; 
      } 
      else { 
       this.closeMenu(); 
       return { 
        isOpen: false 
       } 
      } 
     }); 
    } 

    private openMenu(): void { 
     shiftOverlayButtons(true); 
     ReactDOM.render(<Monaco/>, document.getElementById("overlay")); 
    } 

    private closeMenu(): void { 
     shiftOverlayButtons(false); 
     //ReactDOM.unmountComponentAtNode(document.getElementById("overlay")); 
    } 

} 

ReactDOM.render(<Menu/>, document.body); 

PSである:私はthis.handleClick.bind(this)を行うと、私は別のエラーを取得:ファイルGET:///Users/kalpa/Desktop/monaco-sample/vs/loader.jsネット:: ERR_FILE_NOT_FOUNDを..私はwebpack @ 3.8.1を使用しています。

答えて

0

ハンドルクリック時にバインドがありません。だから、

onClick={this.handleClick}

onClick={this.handleClick.bind(this)}

再フォーマットコードから:

handleClick(event) { 
    this.setState({isOpen: !isOpen}).then(()=>{ 
     if(!this.state.isOpen){ 
      //do something when false 
     } else { 
      // do something when true 
     }}} 
+0

:変更

public handleClick(): void { 

public handleClick =(): void => { 

もっと

アロー機能が///ユーザ/カルパ/デスクトップ/モナコ:ファイルをGET -sample/vs/loader.js net :: ERR_FILE_NOT_FOUND ... webpack @ 3.8.1を使用しています – kalpa

+0

スタックトレースを表示します –

+0

また、setState関数も間違って使用しています。あなたは関数を送信しているオブジェクトを受け取ります。 setStateの後に関数を使用する場合は、setState({prevState:prevState})を使用して関数を使用できます。 –

関連する問題