まずasyncが即return new Promise(fn)
をするだけの糖衣構文なので、
普通にこれが最小単位だと思います。
JavaScript
1const mapDispatchToProps = dispatch => ({
2 fetch: options => dispatch(fetchFoo(options)),
3});
削ったawaitに微妙に挙動が変わりますが、
結局返すのはPromiseのインスタンスだし、
この時点でわざわざ待つメリットは殆どないと思います。
必要なタイミングになったら、その時に改めてawaitなりthenで繋ぐなりして待つべきでしょう。
bind使えば出来そうな気がしますが...
bindの書き方はスコープ, [引数]
です。
スコープを使わない場合はnullでも入れておけば十分でしょう。
JavaScript
1const fetch = (dispatch, options) => dispatch(fetchFoo(options));
2const mapDispatchToProps = dispatch => ({
3 fetch: fetch.bind(null, dispatch),
4});
関数化して切り出したければ、curry化という案もあります。
JavaScript
1const curry = (fn, ...args) =>
2 args.length >= fn.length
3 ? fn(...args)
4 : curry.bind(null, fn, ...args);
5const add = curry((a, b) => a + b);
6
7console.log(add(1)(2)); // 3
8console.log(add(1, 2)); // 3
このcurryを使ってfetch関数を準備します。
JavaScript
1const curry = (fn, ...args) =>
2 args.length >= fn.length
3 ? fn(...args)
4 : curry.bind(null, fn, ...args);
5const fetch = curry((dispatch, options) => dispatch(fetchFoo(options)));
6const mapDispatchToProps = dispatch => ({
7 fetch: fetch(dispatch),
8});
Ramda.js使っても構いません
実践的には私が作った手抜きcurryより、
Ramda.jsのcurryを使った方が良いでしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/12 01:13
2018/09/12 01:14