Mic*_*nes 14 javascript redux redux-thunk
在我用于React Redux项目的Boilerplate中,我在代码中看到了这条评论:
这是一个thunk,这意味着它是一个立即返回延迟评估函数的函数.它对于创建异步操作非常有用,特别是与redux-thunk结合使用时!
现在,如果我理解正确,懒惰评估是返回函数的过程.返回函数的目的是什么,以及如何创建异步操作?
哦,还是一个thunk只是一个功能?
Sea*_*ira 25
thunk是一个不带参数并返回某些东西的函数(或者做一些副作用).延迟评估是将表达式的评估推迟到以后的过程,这可以通过thunk来完成:
// Not lazy
var value = 1 + 1 // immediately evaluates to 2
// Lazy
var lazyValue = () => 1 + 1 // Evaluates to 2 when lazyValue is *invoked*
Run Code Online (Sandbox Code Playgroud)
您还可以使返回值变为惰性:
// Not lazy
var add = (x, y) => x + y
var result = add(1, 2) // Immediately evaluates to 3
// Lazy
var addLazy = (x, y) => () => x + y;
var result = addLazy(1, 2) // Returns a thunk which *when evaluated* results in 3.
Run Code Online (Sandbox Code Playgroud)
最后,我们可以推迟一些异步操作:
// Not lazy
var callApi = spec => fetch(spec.url, spec.options);
// Immediately returns a Promise which will be fulfilled when the network response is processed.
var result = callApi({url: '/api', options: {}});
// Lazy
var callApiLazy = spec => () => fetch(spec.url, spec.options);
var result = callApiLazy({url: '/api', options: {}});
// result is a thunk that when evaluated will return a Promise ...
// which will be fulfilled when the network response is processed.
Run Code Online (Sandbox Code Playgroud)
现在,一个thunk不具备采取零个参数-你可以返回需要更多的参数,成功评价一个懒惰的值.这恰当地称为"currying":
// Curried add (not lazy)
var add = x => y => x + y
var add3 = add(3)
var result = add3(7) // Immediately evaluates to 10
Run Code Online (Sandbox Code Playgroud)
redux-thunk允许您将函数而不是对象作为动作返回,并使用dispatch函数调用函数.然后,您可以同步或异步地懒洋洋地生成一个动作(或动作).大多数情况下,您可能希望使用它来允许您异步分派.
也可以看看: