2017-04-18 16 views
1

私は私のアプリで反応と反応を還元しています。フォームデータを送信している間、私はreduxアクションでAPIを呼び出して、それをレデューサーにディスパッチします。リデューサは "{... state、message:action.message}"を返します。これはコンポーネントにストアが接続されているため、componentWillReceivePropsライフサイクルメソッドを呼び出します。すべてが今のところ完璧に動作しています。還元剤から同じ状態を返すときにReactJs - componentWillReceivePropsがトリガーされない

また、ユーザーがフォームに記入して送信すると、同じ操作が繰り返されます。しかし、今はcomponentWillReceiveProps関数がトリガされていません。これの背後にある理由は、以前の状態データに似ている同じ状態 "{... state、message:action.message}"をリデューサが返します。私が以下のように減速機に乱数を持つ新しいオブジェクトを追加すると、すべてが機能しています。私はときにストア変更componentWillReceivePropsがトリガされることを知っている

{Math.random()...状態、メッセージ:action.message、ランダム}。しかし、フォームが送信されるときに、componentWillReceivePropsメソッドを2回目にトリガする方法はありますか?

これは私のcomponentWillReceivePropsメソッドです。このメソッドは、ユーザーに成功メッセージを表示します。

componentWillReceiveProps = props => { 
    if(typeof props.message !== "undefined" && props.message !== ""){ 
     //Show a success message notification bar 
     this.state._notificationSystem.addNotification({ 
      title : 'Success message', 
      message: 'Form has been successfully submitted', 
      level: 'success', 
      position : 'br', 
      autoDismiss : 10 
     }); 
    } 
} 
+3

'componentWillReceiveProps'は、小道具が変更されたときにトリガします。あなたは小道具を交換したいのですか?あなたのように私に聞こえますが、実行したいコードがあります。その場合、このコードは間違った場所にある可能性があります。 –

+0

還元剤から戻った状態は、react-reduxを使用して最初の状態と小道具が変化しているが、2度目は前と同じ状態を返すように、小道具にマッピングされます。後で呼び出される同じアクションは、以前と同じ状態を返します。私の場合は、データがサーバー({...状態、メッセージ:action.message})に格納された後の成功メッセージです。 – Prem

+1

Redux状態がpropsにマップされています。状態が変わらない場合、小道具は変更されません - 'componentWillReceiveProps'は呼び出されていません。それ自身のロジックで完璧な意味合いを持つ。あなたが望むものを理解していれば、その機能を実行させる方法を尋ねるべきではありません。成功メッセージを表示する方法を尋ねるべきです。 –

答えて

2

react-reduxあなたはそれが変更されなかった場合でも小道具包まコンポーネントの再描画を強制しましょう。これを行うには、connect関数の第4引数として{ pure: false }オプションを渡す必要があります。

高速の例はhereです。

あなたの場合は、アンチパターンのようです。 Fistly、それはすべての状態で更新され、フォーム提出とは関係がありません。第2に、この種のロジック(つまり、「成功の通知を表示しよう」)は、コンポーネントではなくトランザクションを実行するアクション内に存在する必要があります。

関連する問題