2017-10-23 42 views
1

私は、リアクション、つまり現在のブラウザの幅を表示するのはかなり簡単です。ページを読み込んだときにうまく動作しますが、状態を更新するように見えても、何らかの理由でサイズ変更時に更新されません。コンストラクタの状態変化で反応が更新されませんか?

import React from "react"; 
 

 
class SmartBr extends React.Component { 
 
    constructor() { 
 
    super(); 
 
    this.state = { 
 
     WindowWidth: 
 
     window.innerWidth || 
 
     document.documentElement.clientWidth || 
 
     document.body.clientWidth, 
 
     WindowHeight: 
 
     window.innerHeight || 
 
     document.documentElement.clientHeight || 
 
     document.body.clientHeight 
 
    }; 
 
    } 
 

 
    updateDimensions() { 
 
    this.setState = { 
 
     WindowWidth: 
 
     window.innerWidth || 
 
     document.documentElement.clientWidth || 
 
     document.body.clientWidth, 
 
     WindowHeight: 
 
     window.innerHeight || 
 
     document.documentElement.clientHeight || 
 
     document.body.clientHeight 
 
    }; 
 
    } 
 

 
    /** 
 
    * Add event listener 
 
    */ 
 
    componentDidMount() { 
 
    this.updateDimensions(); 
 
    window.addEventListener("resize", this.updateDimensions.bind(this)); 
 
    } 
 

 
    /** 
 
    * Remove event listener 
 
    */ 
 
    componentWillUnmount() { 
 
    window.removeEventListener("resize", this.updateDimensions.bind(this)); 
 
    } 
 

 
    render() { 
 
    return <p>{this.state.WindowWidth}</p>; 
 
    } 
 
} 
 

 
export default SmartBr;

答えて

3

setState外側はあなたがsetStateメソッドを呼び出すために、あなたのupdateDimensions機能を変更する必要があるので、あなたはそれに設定されたオブジェクトではなく、呼び出し、および割り当てない機能ですあなたが今やっているようにオブジェクト:

updateDimensions() { 
    this.setState({ 
    WindowWidth: 
     window.innerWidth || 
     document.documentElement.clientWidth || 
     document.body.clientWidth, 
    WindowHeight: 
     window.innerHeight || 
     document.documentElement.clientHeight || 
     document.body.clientHeight 
    }); 
} 
+0

氷は言った。 setStateはオブジェクトではない関数です。 – archae0pteryx

関連する問題