2016-04-24 11 views
4

次のロジックを実装するにはどうすればよいですか:2つのアクション:syncとasync。そのvalidate()とsave()をしましょう。ユーザーがボタンvalidate()をクリックすると、ステートストア内の変数isValidが変更されます。次に、isValidアクションが実行された場合。条件が他のアクションの後のリビットコールアクション

+0

あなたは検証が発生した場合saveActionを実行し、減速中のisValid変数と他の変数の両方を変更するためにそれを使用する必要があります。 isValid変数がtrueに設定されるのを待つのに実際には使用されません。 –

+0

@bhargavponnapalli問題は第2の動作が非同期(反応 - サンク)であるため、第1の動作と組み合わせることはできません。 – xander27

+0

別の検証アクションではなく、非同期アクション内で検証することができます。ちょうどアイデア。 –

答えて

3

これらの機能を「クリックハンドラ」で「ラップ」することができます。

//call it on button click 

handleClick =() => { 
    if (validate()) { 
    //call save function 
    save() 
    } 
} 

validate =() => { 
    //do something 
    //check validness and then 
    if (valid) return true 
} 
+0

私は検証ロジックが減速機にあるべきだと思いますが、clicnk hadlerだけではありません。ポイントはそれを '還元的な方法'で実装することです。 – xander27

+0

JSメソッドだけでなく、reduxアクション(http://redux.js.org/docs/basics/Actions.html)を意味します。 – xander27

+2

私はレデューサーがこれに適しているとは思わない。私にとって、私は減速機をこのようなものからきれいに保ち、コンポーネントの状態を変更するためだけに使うのが好きです。あなたはutilsファイルのようなものを作成し、そのすべての機能を保持することができます。しかし、あなたがこれを好きでない場合は、私はあなたがあなたのロジックを指定することができます、あなたはアクションクリエイターでfucntionsを返すことができるように、reduxサンクを見てお勧めします。 – Spooner

4

希望することを実行する方法はたくさんあります。ただし、一般的なルールとして、導出できるReduxには何も格納しないでください。 isValidは、フィールドで検証を実行することによって導き出すことができます。さらに、変更中のフォームフィールド値のような中間状態はReduxに属しているとは思わない。私は彼らが有効とみなされ、提出されるまで、彼らをReact状態に保管します。

Spoonerさんがコメントで述べたように、あなたはサンクの中で同期アクションを呼び出すことができます。または、サンクの状態にアクセスできます。

オプション#1

// Action Creator 
export default function doSomething(isValid) { 
    return (dispatch) => { 

     dispatch(setValid(isValid)); 

     if (isValid) { 
      return fetch() //... dispatch on success or failure 
     } 
    }; 
} 

オプション#2

// Component 
dispatch(setValid(isValid)); 
dispatch(doSomething()); 

// Action Creator 
export default function doSomething() { 
    return (dispatch, getState) => { 

     const isValid = getState().isValid; 

     if (isValid) { 
      return fetch() //... dispatch on success or failure 
     } 
    }; 
} 
関連する問題