2017-06-17 10 views
0

以下のコードでコールバックでアクションを送信できません。コードはアクションを送信しません。しかし、onClickなどのハンドラにConnectedプロパティをアタッチすると、それが実行されます。これらのハンドラを使用しないでコードを動作させるにはどうすればよいですか?Reduxに反応する:子コンポーネントに関数を渡し、子でハンドラなしで呼び出す

(注:この例では、npmのMQTT.jsライブラリを使用しています)。

MQTTを使用してソケットを介して接続メッセージを受信するたびに、正常に接続されたときにフロントエンドに通知するためにストアを更新します。しかし、私はコンポーネントをコンテナではなくコンポーネントにしておく必要があります。

親:

return (
    <MQTT 
    Connected={() => {this.props.sendAction('MQTT_CONNECTED')}} 
    > 
) 

子供:

const MQTT = ({Connected}) => { 
    var client = mqtt.connect(mqttBroker, mqttConnectOptions); 
    client.on('connect', function() { 
    {Connected} 
    } 
    return <div>...</div>; 
} 

sendAction:

export function sendAction(action) { 
    return { 
    type: action 
    } 
} 

答えて

1

{Connected()}に括弧を間違えて忘れてしまった。 子は次のようになります返す

const MQTT = ({Connected}) => { 
    var client = mqtt.connect(mqttBroker, mqttConnectOptions); 
    client.on('connect', function() { 
    {Connected()} 
    } 
    return <div>...</div>; 
} 
+0

元の質問を編集したり、回答を使用して更新を提供したり、実際の回答がそれを受け入れてそれをマークした場合は、元の質問を編集してください。 – hardillb

+2

詳しい情報を追加するには、質問の編集リンクを使用してください。回答を投稿するボタンは、質問に対する完全な回答のためだけに使用してください。 - [レビューから](レビュー/低品質の投稿/ 16448063) –

+0

@hardillbこれは入力ミスのように思われるので、投票を閉じることもできます。 –

0

あなたはちょうどあなたのようにダウン渡しているConnected関数を呼び出すことはできません何らかの理由があります小道具?

const MQTT = ({Connected}) => { 
    var client = mqtt.connect(mqttBroker, mqttConnectOptions); 
    client.on('connect', function() { 
    this.props.Connected() 
    return <div>...</div>; 
    } 
    return null; 
} 
+0

「はTypeError:this.propsが未定義である」、私はショートカットとして{}接続に使用するからです。しかし、私はあなたに感謝しました。私はかっこを入れるのを忘れていたので、実際には{Connected}ではなく{Connected()}であるはずです。ありがとうございました! – Joseph

+0

ニース!正しいコードはどのように見えますか? –

+0

私はちょうどそれに答えました、私はちょうど私の機能のかっこを忘れました。ご協力ありがとうございました! – Joseph

関連する問題