0

プロジェクトでreactを使用してredux-sagaを使用しています。私のサガの1つは次のようになります。

    function* deleteCitySaga(payload) {
  const config = {
    headers: {
      Authorization: 'Bearer ' + loadState(),
      Accept: 'application/json'
    }
  };
  const data = yield axios.delete(routeDeleteCiudad + payload.id, config)
    .then(response => response)
    .catch(err => err.response);
  }

私がやりたいのは、自分の行動を約束と見なすことです。そうすれば、saga からの要求がいつ終了するかを知ることができます。これは、私のコンポーネントからの行動喚起がどのように見えるかです:

    handleEliminar = () => {

     this.props.handleDelete(this.state.id)
     .then((success)=>{console.log('End')})//This is what I want to do, I want to know when my action ends
     .catch((error)=>alertError);
    };

    const mapDispatchToProps = dispatch => ({
     handleDelete: bindActionCreators(deleteCity, dispatch),
      });

私が必要とすることを行うための最良の方法は何でしょうか?

4

1 に答える 1

0

Redux saga には、それを行う簡単な方法はありません。最も一般的なのは、アクションを開始してから忘れることです。そのアクションの結果が気になる場合は、saga に redux ストアに何らかの変更を加えさせることができます。その状態の変化によって、それが完了したという事実が警告されます。

これを行う 1 つの方法を考えることができます。アクションをディスパッチするときに、新しい promise を作成し、resolve 関数と reject 関数をアクションの一部として渡す必要があります。その後、サガはそれが行うことを行い、完了したら解決または拒否を呼び出します。例えば:

const mapDispatchToProps = dispatch => ({
  handleDelete: (id) => new Promise((resolve, reject) => {
    dispatch({ type: 'deleteCity', id, resolve, reject });
  });
})

function* deleteCitySaga(action) {
  try {
    // some code omitted
    const response = yield axios.delete(routeDeleteCiudad + action.id, config);
    action.resolve(response);
  } catch (err) {
    action.reject(err);
  }
}
于 2019-11-03T12:12:26.957 に答える