2017-11-21 16 views
0

私は1回呼び出されるredux-sagaを持っていますが、2回実行しています。redux-sagaが2回注入される

これは、佐賀を開始アクションです:

export function createRequest (data) { 
    return { 
    type: CREATE_REQUEST, 
    payload: {data} 
    }; 
} 

と私のsagas.jsファイルがこのようになります。

export function* create (x) { 
    try { 
    const response = yield call(request, URL_TO_API, Object.assign({}, buildBaseHeaders('en'), { 
     method: 'post', 
     body: JSON.stringify(x.payload.data) 
    })); 
    yield put(createSuccess(response)); 
    } catch (error) { 
    yield put(createFailure(error)); 
    } 
} 

... my other sagas 

export default function* defaultSaga() { 
    yield takeLatest(CREATE_REQUEST, create); 
    ... my other calls 
} 

私はリアクトコンポーネントにサガを注入してる方法ですこれは:

const withConnect = connect(mapStateToProps, mapDispatchToProps); 
const withReducer = injectReducer({key: 'myComponent', reducer}); 
const withSaga = injectSaga({key: 'myComponent', saga}); 

export default compose(withReducer, withSaga, withConnect) MyComponent; 

しかし、サガは2回注入されます。では、私はここで何が欠けていますか? MyComponentがレンダリングされる回数に関係なく、一度しかサガを挿入することはできませんか?

+0

誰がcreateSagaを呼び出しますか?それが2回実行され、1つが失敗した場合は、create関数を1回だけconsole'ingすることはOKです。私はここに全体の画像がありません:/ – Lucio

+0

'create'は' createRequest'アクションによって呼び出されます。そのアクションは1回使用されますが、サガは2回呼び出されます。 – assembler

+0

ああ、今私はアイデアがありません:( – Lucio

答えて

1

しかし、サガは2回注射されます。では、私はここで何が欠けていますか?

解決方法は、redux-sagas-injector npmライブラリの処理方法によって異なります。一般的なケースでは、sagaは、一部の関数呼び出しやオブジェクトの削除では処理できない "ライブ"プロセスマネージャで構成されているため、サガの非同期読み込みと適用は困難です。
これは、カスタマイズされた外部コールコード(カスタムメイドのコールバックドメイン(Promises、AJAX/XHR、setImmediateなど)を起動することができることを示しています(HMRは部分モードではsagasで動作しませんページ全体をリロードする必要があります)。

sagaルータスイッチングで注入を実行する場合は、古いサガは暗黙的に外側から処理する暗黙のアクションを持っています(特別な内部技術廃棄アクションなど)。ルータサイドに誤った設定はないたとえば、ページが2回開設されました。

+0

あなたはそれを解決する方法について私に良い点を教えてくれました。 – assembler

関連する問題