{"componentChunkName":"component---src-components-blog-template-js","path":"/blog/redux-thunk/","result":{"data":{"markdownRemark":{"frontmatter":{"title":"Redux Thunk","date":"2019-06-13"},"html":"<p>What is Redux Thunk?\nIt is a method to handle side-effects from performing asynchronous operations in Redux.\nAction in Redux does not allow asynchronous operations such as fetching data from an API. <code class=\"language-text\">Thunk</code> gives solution to this issue, it allows us to create an action that returns a function using <code class=\"language-text\">dispatch</code></p>\n<p>The way to implement thunk in Redux is by applying it inside the middleware, like so:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> createStore<span class=\"token punctuation\">,</span> applyMiddleware <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'redux'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> thunk <span class=\"token keyword\">from</span> <span class=\"token string\">'redux-thunk'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> rootReducer <span class=\"token keyword\">from</span> <span class=\"token string\">'./reducers'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> store <span class=\"token operator\">=</span> <span class=\"token function\">createStore</span><span class=\"token punctuation\">(</span>rootReducer<span class=\"token punctuation\">,</span> <span class=\"token function\">applyMiddleware</span><span class=\"token punctuation\">(</span>thunk<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>After that we can create an action such as:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">loginFormSubmitted</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">email<span class=\"token punctuation\">,</span> password</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">dispatch</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token function\">validateLogin</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">success</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span><span class=\"token function\">loginSuccess</span><span class=\"token punctuation\">(</span>email<span class=\"token punctuation\">,</span> password<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span><span class=\"token function\">loginFail</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>By using thunk, we can perform an asynchronous task inside our action in redux. From the code above, if validateLogin function is successful, it will dispatch a loginSuccess function with email and password as the arguments. If it fails, it will dispatch a loginFail function.</p>"}},"pageContext":{"slug":"/redux-thunk/"}},"staticQueryHashes":[]}