2017-07-21 9 views
0

WebSocket接続から発行されたタイムスタンプをレンダリングするコンポーネントServerTimeがあります。 componentDidMountpropの値がcomponentWillUnmountのようなメソッドに設定されていないのはなぜですか?

<ServerTime webSocket={this.props.webSocket} /> 

は私がのWebSocketの持つEventEmitterのAPIを使用してコールバックを登録します。

componentDidMount() { 
    this.props.webSocket.on('time', this.update); 
} 

これはすべて動作します。

IはServerTimecomponentWillUnmount方法を追加し、this.props.webSocketの値を印刷した場合、その後webSocketの値が(falseである)、その初期値です。

componentWillUnmount() { 
    console.log(this.props.webSocket); // false! 
} 

なぜwebSocketオブジェクトがcomponentWillUnmountでは使用できない場合がありますか?

私はここで間違っていますか?

私の勘違いは、これが私の一部の再選択またはimmutable.jsの誤解によることです。

私はredux、connect、reselect、およびimmutable.jsを使用しています。

+0

は 'websSocket'ですここに入力するか、実際のコードに入力しますか? (コンソールステートメント内) – chazsolo

+0

ありがとうございます。タイプミスは私の質問だけです。固定 – Ben

答えて

0

不変たびストアの状態が変異している、あなたは、コンポーネントの状態でのWebSocketを保存することができ、新規のWebSocketを作成します。

constructor(props) { 
    super(props); 
    const {webSocket} = props; 
    this.state = { webSocket }; 
} 

をアンマウント上のWebSocketにアクセスするには:

componentWillUnmount() { 
    const {webSocket} = this.state; 
    console.log(webSocket); 
    // do something with webSocket 
} 
+0

ありがとうございます。あなたの実装では、 'this.props.webSocket'は' componentWillUnmount'で取得すると 'false'です。だから私の問題はまだ存在しています - なぜこれがありますか? – Ben

+0

@BenAston私は答えを更新しました。あなたのwebsocketは、それが支柱として渡されるたびに新しいインスタンスであるようです。 – Fawaz

+0

immutable.jsが小道具のwebsocketの値を「リセット」している理由を理解できますか?そうするのを止めることはできますか? – Ben

関連する問題