<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gan Jun Kai</title>
    <description>The latest articles on DEV Community by Gan Jun Kai (@jkgan).</description>
    <link>https://dev.to/jkgan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F345182%2F4570094e-9c62-4e05-ad6e-9eee58fbdbd0.jpeg</url>
      <title>DEV Community: Gan Jun Kai</title>
      <link>https://dev.to/jkgan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jkgan"/>
    <language>en</language>
    <item>
      <title>Introducing Flipper Redux plugin</title>
      <dc:creator>Gan Jun Kai</dc:creator>
      <pubDate>Sun, 19 Apr 2020 05:39:15 +0000</pubDate>
      <link>https://dev.to/jkgan/introducing-flipper-redux-plugin-42jf</link>
      <guid>https://dev.to/jkgan/introducing-flipper-redux-plugin-42jf</guid>
      <description>&lt;p&gt;&lt;a href="https://fbflipper.com/"&gt;Flipper&lt;/a&gt; is a platform for debugging iOS, Android and React Native apps. It is a companion for mobile app development on iOS and Android with a bunch of useful tools including a log viewer, interactive layout inspector, and network inspector. Starting from React Native 0.62, flipper support is &lt;a href="https://reactnative.dev/blog/2020/03/26/version-0.62"&gt;enabled by default&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;After some time using Flipper, a friend of mine, &lt;a class="mentioned-user" href="https://dev.to/plwai"&gt;@plwai&lt;/a&gt;
, and I decided to create a redux plugin for React Native for Flipper since we are using &lt;a href="https://redux-toolkit.js.org/"&gt;redux toolkit&lt;/a&gt; in our project.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i3JOwpme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/jk-gan"&gt;
        jk-gan
      &lt;/a&gt; / &lt;a href="https://github.com/jk-gan/redux-flipper"&gt;
        redux-flipper
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Redux middleware for React Native for Flipper
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Redux Flipper&lt;/h1&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/55819be58cfd9459d69e20ec479dbca43f838096b3987339159f330587efdba0/68747470733a2f2f692e696d6775722e636f6d2f626c716e386f542e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/55819be58cfd9459d69e20ec479dbca43f838096b3987339159f330587efdba0/68747470733a2f2f692e696d6775722e636f6d2f626c716e386f542e706e67" alt="screenshot of the plugin"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Redux middleware for &lt;a href="https://fbflipper.com/" rel="nofollow"&gt;Flipper&lt;/a&gt;. It can log redux actions and show inside Flipper using &lt;a href="https://github.com/jk-gan/flipper-plugin-redux-debugger"&gt;flipper-plugin-redux-debugger&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
Support&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;React Native
&lt;ul&gt;
&lt;li&gt;For &lt;code&gt;react-native&lt;/code&gt; &amp;gt;= 0.62, flipper support is enabled by default&lt;/li&gt;
&lt;li&gt;For &lt;code&gt;react-native&lt;/code&gt; &amp;lt; 0.62, follow &lt;a href="https://fbflipper.com/docs/getting-started/react-native.html#manual-setup" rel="nofollow"&gt;these steps&lt;/a&gt; to setup your app&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Redux or Redux-Toolkit&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Get Started&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Install &lt;a href="https://github.com/jk-gan/redux-flipper"&gt;redux-flipper&lt;/a&gt; middleware and &lt;code&gt;react-native-flipper&lt;/code&gt; in your React Native app:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-shell position-relative js-code-highlight"&gt;
&lt;pre&gt;yarn add redux-flipper react-native-flipper
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; for iOS&lt;/span&gt;
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; ios &lt;span class="pl-k"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pod install&lt;/pre&gt;

&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Add the middleware into your redux store:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-js position-relative js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-s1"&gt;createStore&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s1"&gt;applyMiddleware&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;'redux'&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;middlewares&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-kos"&gt;[&lt;/span&gt;
  &lt;span class="pl-c"&gt;/* other middlewares */&lt;/span&gt;
&lt;span class="pl-kos"&gt;]&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-k"&gt;if&lt;/span&gt; &lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-c1"&gt;__DEV__&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
  &lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;createDebugger&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;require&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;'redux-flipper'&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;default&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
  &lt;span class="pl-s1"&gt;middlewares&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;push&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;createDebugger&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-kos"&gt;}&lt;/span&gt;

&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;store&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;createStore&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-v"&gt;RootReducer&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-en"&gt;applyMiddleware&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;...&lt;span class="pl-s1"&gt;middlewares&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Install &lt;a href="https://github.com/jk-gan/flipper-plugin-redux-debugger"&gt;flipper-plugin-redux-debugger&lt;/a&gt; in Flipper desktop client:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="snippet-clipboard-content position-relative"&gt;
&lt;pre&gt;&lt;code&gt;Manage Plugins &amp;gt; Install Plugins &amp;gt; search "redux-debugger" &amp;gt;&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/jk-gan/redux-flipper"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i3JOwpme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/jk-gan"&gt;
        jk-gan
      &lt;/a&gt; / &lt;a href="https://github.com/jk-gan/flipper-plugin-redux-debugger"&gt;
        flipper-plugin-redux-debugger
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Flipper plugin for Redux in React Native
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Redux Debugger Plugin for Flipper&lt;/h1&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/55819be58cfd9459d69e20ec479dbca43f838096b3987339159f330587efdba0/68747470733a2f2f692e696d6775722e636f6d2f626c716e386f542e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/55819be58cfd9459d69e20ec479dbca43f838096b3987339159f330587efdba0/68747470733a2f2f692e696d6775722e636f6d2f626c716e386f542e706e67" alt="screenshot of the plugin"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;flipper-plugin-redux-debugger&lt;/code&gt; allows you read React Native redux logs inside &lt;a href="https://fbflipper.com/" rel="nofollow"&gt;Flipper&lt;/a&gt; now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Action&lt;/li&gt;
&lt;li&gt;State comparison&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Get Started&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Install &lt;a href="https://github.com/jk-gan/redux-flipper"&gt;redux-flipper&lt;/a&gt; middleware and &lt;code&gt;react-native-flipper&lt;/code&gt; in your React Native app:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-shell position-relative js-code-highlight"&gt;
&lt;pre&gt;yarn add redux-flipper react-native-flipper
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; for iOS&lt;/span&gt;
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; ios &lt;span class="pl-k"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pod install&lt;/pre&gt;

&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Add the middleware into your redux store:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-js position-relative js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-s1"&gt;createStore&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s1"&gt;applyMiddleware&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;"redux"&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;middlewares&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-kos"&gt;[&lt;/span&gt;
  &lt;span class="pl-c"&gt;/* other middlewares */&lt;/span&gt;
&lt;span class="pl-kos"&gt;]&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;

&lt;span class="pl-k"&gt;if&lt;/span&gt; &lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-c1"&gt;__DEV__&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
  &lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;createDebugger&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;require&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s"&gt;"redux-flipper"&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;default&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
  &lt;span class="pl-s1"&gt;middlewares&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;push&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;createDebugger&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-kos"&gt;}&lt;/span&gt;

&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;store&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;createStore&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-v"&gt;RootReducer&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-en"&gt;applyMiddleware&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;...&lt;span class="pl-s1"&gt;middlewares&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Install &lt;a href="https://github.com/jk-gan/flipper-plugin-redux-debugger"&gt;flipper-plugin-redux-debugger&lt;/a&gt; in Flipper desktop client:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="snippet-clipboard-content position-relative"&gt;&lt;pre&gt;&lt;code&gt;Manage Plugins &amp;gt; Install Plugins &amp;gt; search "redux-debugger" &amp;gt; Install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Start your app, then you should be able to see Redux Debugger on your Flipper app&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
Acknowledgement&lt;/h2&gt;
&lt;p&gt;This plugin is inspired by &lt;a href="https://github.com/blankapp/flipper-plugin-reduxinspector"&gt;flipper-plugin-reduxinspector&lt;/a&gt; which only for…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/jk-gan/flipper-plugin-redux-debugger"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;code&gt;redux-flipper&lt;/code&gt; is a redux middleware to send the information into Flipper. &lt;code&gt;flipper-plugin-redux-debugger&lt;/code&gt; is a flipper plugin for Flipper Desktop Client to display all the redux logs. They are designed to make it easier to debug redux states using Flipper.&lt;/p&gt;

&lt;h3&gt;
  
  
  Feature:
&lt;/h3&gt;

&lt;p&gt;The plugin provides some features out of the box:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Action logs&lt;/li&gt;
&lt;li&gt;States comparison for each action&lt;/li&gt;
&lt;li&gt;Manual redux action dispatcher&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MgLR1T3E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xaq9210pfsgpwuupqt4h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MgLR1T3E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xaq9210pfsgpwuupqt4h.png" alt="Plugin layout"&gt;&lt;/a&gt;the plugin layout&lt;/p&gt;

&lt;p&gt;Previously we have to use multiple tools to debug React Native app. Android studio for Android native part, Xcode for iOS native part and browser debugger for redux. With this plugin and Flipper, developers can now debug their apps on a single platform!&lt;/p&gt;

&lt;p&gt;If you find this plugin helping in your development workflow, please share it with others.&lt;/p&gt;

&lt;p&gt;Let me know what do you think about this article through comments. Any suggestions and feedbacks are welcome! Thanks!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cover photo credits to Markus Winkler on Unsplash&lt;/em&gt;&lt;/p&gt;

</description>
      <category>redux</category>
      <category>reactnative</category>
      <category>flipper</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
