【ミニプログラム太郎ベストプラクティス】非同期アクションエレガントプラクティス(簡略化されたプロセス)

アイデアを提供するために、Haから学ぶことができます。質問がある場合は、
taroの足場にコメントを残すことができます 。次の記事では、より多くのスキルについてゆっくりと説明し
ますhttps://github.com/wsdo/taro -...

概要

私たちは、プロジェクトの要求の公式アクションを得たとき
、あなたは下に示すように、二つの関数(戻り値の型、派遣)、スーパートラブルを記述する必要があります。
function articleList(data) {
  return { type: LIST, payload: data }
}

export function list() {
  console.log('list')
  return (dispatch) => {
    Taro.request({
      url: 'http://api.shudong.wang/v1/article/list',
      data: {
        foo: 'foo',
        bar: 10
      },
      header: {
        'content-type': 'application/json'
      }
    }).then((res) => {
      dispatch(articleList(res.data.article)) // 需要在另一个函数 dispatch
    })
  }
}
すべての関数がこのように記述されている場合、それは非常に苦痛で冗長なコードがたくさんあるので、どのように設計すればよいでしょうか?

設計

  • パラメータ:タイプタイプ、関数(自動ディスパッチ)
この設計の後、アクションを非常に簡単に使用できます
/**
 * 创建API Action
 *
 * @export
 * @param actionType Action类型
 * @param [func] 请求API方法,返回Promise
 * @returns 请求之前dispatch { type: ${actionType}_request }
 *          请求成功dispatch { type: ${actionType}, payload: ${resolveData} }
 *          请求失败dispatch { type: ${actionType}_failure, payload: ${rejectData} }
 */
export function createApiAction(actionType, func = () => {}) {
  return (
    params = {},
    callback = { success: () => {}, failed: () => {} },
    customActionType = actionType,
  ) => async (dispatch) => {
    try {
      dispatch({ type: `${customActionType  }_request`, params });
      const data = await func(params);
      dispatch({ type: customActionType, params, payload: data });

      callback.success && callback.success({ payload: data })
      return data
    } catch (e) {
      dispatch({ type: `${customActionType  }_failure`, params, payload: e })

      callback.failed && callback.failed({ payload: e })
    }
  }
}

最小限の使用

前の記事で説明したカプセル化されたAPI非同期アクションにより、非常にシンプルになりました
import { createApiAction } from './index'

export const list = createApiAction(LIST, params => api.get('news/list', params))

すべてのコード

あなたがあなたを助けることができるならば、私が星を注文するのを手伝ってください
https://github.com/wsdo/taro -...

おすすめ

転載: www.cnblogs.com/homehtml/p/12694649.html