2017-02-01 8 views
0

アクションがディスパッチされると、リデューサはそれに応じて状態を変更し、アクションを呼び出したコンポーネントは状態にアクセスします(プロバイダによってプロップされます)。私は正しい?React Native Redux:アクションディスパッチ、結果の返却

状態はコンポーネント内のアクションの結果にアクセスする唯一の方法ですか? (アクションを呼び出したコンポーネント)。

アクションにコールバック関数を渡し、その結果をコンポーネントに返す方法はありますか?

答えて

4

reducexでは、アクションがディスパッチされると、リデューサはそれに応じて状態を変更します。アクションを呼び出したコンポーネントも状態にアクセスできます(プロバイダによってプロップされます)。私は正しい?

reducexパターンでアクションがトリガーされると、すべてのレデューサーが実行されますが、このタイプのアクションで動作するレデューサーのみがストアで縮小ジョブを行います。場合によっては、アクションタイプを返さないアクションを持つことができます。私は通常、減速機にアプリケーションストア内の状態を減らしたい場合は、アクションオブジェクトを返します。そうでなければ、私は必要ありません。状態が減少すると、値をレンダリングするすべてのコンポーネントが再レンダリングされることを忘れないでください。

状態はコンポーネント内のアクションの結果にアクセスする唯一の方法ですか? (アクションを呼び出したコンポーネント)。

実行後に結果を返すようにアクションを設計することはできますが、reduxパターンは完全には使用しません。

コールバック関数をアクションに渡し、それを使用して結果をコンポーネントに返すことはどうですか?

私はこれまでにこれを試したことはありませんが、私は約束が良い選択肢だと思います。私はいつもサーバーから私の結果を取得するためにaxiosを使用します。結果がある場合、別のAxiosが減速機の状態を更新するためにディスパッチされます。そうでなければ、エラー処理の減速器がディスパッチされます。 Reduxので

//actions 
const axios from 'axios' 
const FETCH_ITEMS = 'FETCH_ITEMS' 
const FETCH_ITEMS_RECEIVED = 'FETCH_ITEMS_RECEIVED' 
const FETCH_ERROR = 'FETCH_ERROR' 
const SERVER_BASE_URL = 'localhost:4000/' 

export function itemsReceive(items){ 
    return { 
     type: FETCH_ITEMS_RECEIVED, 
     items 
    } 
} 

export function itemsFetchError(){ 
    return { 
     type: FETCH_ERROR, 
     errorMsg: 'There was an issue fetching items.' 
    } 
} 

//This function shall dispatch the two actions above in case we have the expected result or an error. 
export function fetchItems(){ 
    return dispatch => { 
     axios.get(SERVER_BASE_URL + 'items'). 
     then(function(res){ 
      const { data } = res 
      if(data.status === 0){ //data.status is just a status sent by my server to show the response is good. 
       const items = data.response 
       dispatch(itemsReceive(items)) 
      }else{ 
       dispatch(itemsFetchError()) 
      } 
     }).catch(function(err)){//this error here is usually caused by network disruption 
       dispatch(itemsFetchError()) 
     } 
    } 
} 
+0

詳細な回答ありがとうございます。 – Ataomega

+0

あなたは大歓迎です、@Ataomega – cdaiga

1

、アクションがディスパッチされる場合、減速は、それに応じて状態 を変更するアクションを呼び出したコンポーネントは、また、(プロバイダによって小道具を通過した)状態に アクセスを有します。私は正しい?

はい、あなたは正しいです。アクションがディスパッチされると、アクションクリエイターを指定する必要があります。アクションクリエーターの中には、シンクまたは非同期アクション(thunkまたはsagaを使用して)を発生させることができ、各アクションcreateはactionTypeおよびpayloadを持ちます(オプション、通知し、アクションから渡されたタイプと一致してしまいます。

コンポーネントにアクションの結果にアクセスするための唯一の方法な状態ですか?(アクションと呼ばれているコンポーネント)。

reduxのベストプラクティスとして、国家はリデューサー(純粋な関数として)によって変更されなければなりません。それは、その状態を聞いている場合、コンポーネントに小道具として渡されます。

コールバック関数をアクションに渡し、それを使用して の結果をコンポーネントに返すのはどうですか?

コールバック関数をアクション作成者に渡すことができます。アクション作成者は単なる関数です。

関連する問題