2017-01-27 9 views
0

ジオロケーションライブラリ(https://github.com/transistorsoft/react-native-background-geolocation)を使用するeコマースアプリを作成しています。React Native + Redux:サードパーティライブラリの関数をどこに置くか?

私がorderStateている:あなたが見ることができるように

const ordersInitState = { 
    lineItems: [], 
    status: ORDER_STATUSES.AWAITING_CHECKOUT, 
}; 

const ordersReducer = (prevState=ordersInitState, action) => { 
    switch(action.type) { 
    ... 
    case actions.ORDERS.REMOVE_ITEM: 
     const lineItems = [...prevState.lineItems]; 
     const indexToRemove = action.payload; 
     lineItems.splice(indexToRemove, 1); 

     const status = lineItems.length > 0 ? prevState.status : ORDER_STATUSES.AWAITING_CHECKOUT; 

     return { 
     ...prevState, 
     status, 
     lineItems, 
     }; 
    default: 
     return prevState; 
    } 
} 

export default ordersReducer; 

、クライアントが自分のカートからアイテムを削除することが許可されています。彼らがすべてを取り除くと、注文ステータスはリセットされます。彼らは彼らのカート(lineItems.length === 0)を空に終わる行う場合、私はまた、ジオロケーションライブラリーから単純な行を実行したい:

BackgroundGeolocation.removeGeofence("blah");

私はこれを置くでしょうか?それは状態とは関係がないので、減速機でそれをするのは間違っていると感じます。また、特定のコンポーネントに固有のものではないので、それを私のコンポーネントの1つに入れることは理にかなっていません。

私は未経験ではまだまだ新しいので、私は非国家関連の方法をどこに置くべきかはわかりません。

答えて

1

あなたが探しているもののためによく使われる名前は、 "副作用"ミドルウェアと呼ばれます。要約では、アプリケーション状態が変更されたときに外部システム(この場合はジオロケーションライブラリ)に影響を与えたいとします。

このユースケースには多くのライブラリがあります。より一般的なもののいくつかはredux-sagaredux-loopです。これらは両方とも優れたツールであり、複雑な副作用の管理に構造を与えるのに役立ちますが、どちらも重要な概念的なオーバーヘッドがあり、本当に必要なときにのみ使用するべきです。

あなたが迅速かつ簡単な解決策が必要な場合、あなたはあなたの店の変化にはJavaScriptモジュールsubscribeのプレーンを作成し、あなたのための副作用を実行することができます

import store from '../your/redux/store; 

let previousCount = 0; 
store.subscribe(() => { 
    const count = store.getState().orders.lineItems.length; 
    if (count === 0 && previousCount > 0) { 
    // someone just emptied the cart, so execute side-effect 
    BackgroundGeolocation.removeGeofence("blah"); 
    } 
    previousCount = count; 
}); 

そしてあなた自身がこれを必要とする見つけた場合タイプのソリューションを繰り返し使用すると、上記のライブラリのいずれかにアクセスできます。

+0

恐ろしいですね!これが存在するのか分からなかった!どうもありがとう – Edmund

関連する問題