<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mark&#39;s Dev Blog</title>
    <link>https://blog.isquaredsoftware.com/series/newsletter/index.xml</link>
    <description>Recent content on Mark&#39;s Dev Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <atom:link href="https://blog.isquaredsoftware.com/series/newsletter/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Mark&#39;s Dev Links - Issue #6</title>
      <link>https://blog.isquaredsoftware.com/2018/03/marks-dev-links-006/</link>
      <pubDate>Tue, 06 Mar 2018 20:00:00 -0500</pubDate>
      
      <guid>https://blog.isquaredsoftware.com/2018/03/marks-dev-links-006/</guid>
      <description>&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Hi, and welcome to issue #6 of Mark&#39;s Dev Links!  This is a weekly-ish email newsletter, focused on the React and Redux ecosystem, and stuff that&#39;s caught my attention.&lt;/p&gt;

&lt;h2 id=&#34;news-links-and-discussion&#34;&gt;News, Links, and Discussion&lt;/h2&gt;

&lt;h4 id=&#34;webpack-4-0-released&#34;&gt;Webpack 4.0 released&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Announcements&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/webpack/webpack-4-released-today-6cdb994702d4&#34;&gt;Medium: Webpack 4: released today!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/webpack/webpack/releases/tag/v4.0.0&#34;&gt;Webpack 4.0 release notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/webpack/webpack-4-import-and-commonjs-d619d626b655&#34;&gt;Medium: Webpack 4: import() and CommonJS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/webpack/webpack-4-code-splitting-chunk-graph-and-the-splitchunks-optimization-be739a861366&#34;&gt;Medium: Webpack 4: Code splitting, chunk graph, and the splitChunks optimization&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reactions&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://auth0.com/blog/webpack-4-release-what-is-new/&#34;&gt;Auth0: Webpack 4.0 Release: What&#39;s new?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/AdamRackis/status/967954078977445889&#34;&gt;Adam Rackis: I don&#39;t know what they did, but Webpack 4 dropped my minified bundle size&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/jmar777/status/968175968794836992&#34;&gt;Jeremy Martin: Prod builds 61% faster, config changes ~15 LOC, bundle sizes smaller&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/webpack-contrib/webpack-stylish&#34;&gt;webpack-contrib/webpack-stylish&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Webpack 4 just went final over the weekend.  Major highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build speeds appear to be much faster, with beta users reporting builds upwards of 60% faster than 3.x&lt;/li&gt;
&lt;li&gt;Built-in &lt;code&gt;development&lt;/code&gt; and &lt;code&gt;production&lt;/code&gt; modes, and &amp;quot;zero-config&amp;quot; sensible defaults out of the box&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;CommonsChunkPlugin&lt;/code&gt; is now deprecated, replaced by a new built-in chunking behavior&lt;/li&gt;
&lt;li&gt;Support for libraries defining a &lt;code&gt;sideEffects : false&lt;/code&gt; flag in their &lt;code&gt;package.json&lt;/code&gt; to enable much better tree-shaking for smaller bundles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that the docs updates for 4.0 aren&#39;t published yet, and some of the popular plugins like &lt;code&gt;HtmlWebpackPlugin&lt;/code&gt; have needed temporary forks to be compatible.&lt;/p&gt;

&lt;p&gt;Adam Rackis is doing some experimenting with upgrading to Webpack 4, and has been posting tweets about his results, including an improvement in bundle size and a gist comparing the output between v3 and v4.&lt;/p&gt;

&lt;p&gt;As a related note, there&#39;s a new plugin available called &lt;code&gt;webpack-stylish&lt;/code&gt;, which looks like it cleans up the standard Webpack build stats output and makes it easier to read.  I&#39;ll be giving that a shot on my projects later this week.&lt;/p&gt;

&lt;h4 id=&#34;more-react-16-related-discussions&#34;&gt;More React 16-related discussions&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/dan_abramov/status/967242377030262784&#34;&gt;Dan Abramov: &amp;quot;Using a new strange React API, and never felt this productive before. Will spill the beans at JSConf Iceland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/dan_abramov/status/967372521644396545&#34;&gt;Dan Abramov: Will post code examples after my talk. I expect the API to be controversial, and want to show what it can do first&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/acdlite/status/967244380401631232&#34;&gt;Andrew Clark: if this new API is successful, I expect it to usher in an era of rapid OSS innovation in the React community, like the Flux period&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/sebmarkbage/status/941163837625057280&#34;&gt;Sebastian Markbage: That feeling when you come up with an API that solves all the problems but you know is going to be extremely controversial...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/sebmarkbage/status/967880195997749248&#34;&gt;Sebastian Markbage: Modeling async React has been a lot of work, but I&#39;m convinced it&#39;s the right model to pursue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dan and Andrew began teasing some big upcoming changes for React on Saturday.  Dan is scheduled to speak at JS Conf Iceland on March 1 (talk entitled &lt;a href=&#34;https://2018.jsconf.is/schedule/#!/conference/thursday&#34;&gt;&amp;quot;React 16 and Beyond&amp;quot;&lt;/a&gt;), and is promising to pull back the curtain on what the React team has been working on lately.  Based on the tweets, it seems that the React team has come up with some new async-related APIs that are powerful and productive, but likely to be controversial.  They&#39;re clearly excited about the changes, and it&#39;ll be fascinating to see what they&#39;ve put together.   The conference will be livestreamed on Youtube, so I may have to get up extra early Thursday morning to watch Dan&#39;s talk :)&lt;/p&gt;

&lt;h4 id=&#34;typescript-and-flow-usage-in-the-react-community&#34;&gt;TypeScript and Flow Usage in the React community&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/reactjs/comments/7yxecm/why_isnt_typescript_used_more_in_the_react/&#34;&gt;Reddit: Why isn&#39;t Typescript used more in the React community?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There was a great discussion thread this week on the relative merits of TS and Flow and their adoption by React users.  In particular, Francois Ward of Hubspot (/u/phoenixmatrix) had some excellent in-depth comments on why they&#39;re going to be switching to TS in the near future, and a lot of the tool interop complexities that had prevented them from doing so until now.  The whole thread is worth reading.&lt;/p&gt;

&lt;h4 id=&#34;react-context-optimizations&#34;&gt;React Context Optimizations&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://hph.is/coding/bitmasks-react-context&#34;&gt;Bitmasks and the new React Context API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I previously linked to articles and discussion on the new React &lt;code&gt;context&lt;/code&gt; API in issue #2.  As a summary, you might want to read &lt;a href=&#34;https://medium.com/dailyjs/reacts-%EF%B8%8F-new-context-api-70c9fe01596b&#34;&gt;Kent C Dodds&#39; overview newsletter/post on the new API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One of the interesting features of the new API is that it supports a optimization of which context consumers get notified for a given update, based on a bitmasking approach.  This post shows both how to use context in general, and gives an example of how to use the bitmasking optimization.&lt;/p&gt;

&lt;h4 id=&#34;an-engineer-s-guide-to-communication&#34;&gt;An Engineer&#39;s Guide to Communication&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/art-of-engineering/an-engineers-guide-to-communication-99180699a0e6&#34;&gt;https://medium.com/art-of-engineering/an-engineers-guide-to-communication-99180699a0e6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Saw this come through my Twitter feed this evening, and it&#39;s definitely worth including.  Some good short solid advice on how we as engineers can improve our communication skills and team interaction.&lt;/p&gt;

&lt;h2 id=&#34;redux-ecosystem&#34;&gt;Redux Ecosystem&lt;/h2&gt;

&lt;h4 id=&#34;promise-middlewares&#34;&gt;Promise middlewares&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/redux-utilities/redux-promise&#34;&gt;acdlite/redux-promise&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/lelandrichardson/redux-pack&#34;&gt;lelandrichardson/redux-pack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/markerikson/redux-ecosystem-links/blob/master/middleware-async.md#promises&#34;&gt;Redux Addons Catalog: Middleware - Async#Promises&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A very common use case is to dispatch Redux actions based on the lifecycle of a promise (creation, success/failure).  Two of the most popular libraries for this are &lt;code&gt;redux-promise&lt;/code&gt; from Andrew Clark and &lt;code&gt;redux-pack&lt;/code&gt; from Leland Richardson.  &lt;code&gt;redux-promise&lt;/code&gt; is extremely short and simple, and simply dispatches actions formatted using the Flux Standard Action (FSA) structure.  &lt;code&gt;redux-pack&lt;/code&gt; tries to apply more &amp;quot;convention over configuration&amp;quot; over data fetching and promise behavior, and provides more structure for handling updates.&lt;/p&gt;

&lt;h2 id=&#34;redux-issues-spotlight&#34;&gt;Redux Issues Spotlight&lt;/h2&gt;

&lt;h4 id=&#34;more-faq-updates&#34;&gt;More FAQ Updates&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/reactjs/redux/issues/2854&#34;&gt;Redux #2854: FAQ Updates, Part 2: Electric Boogaloo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I had &lt;a href=&#34;https://github.com/reactjs/redux/issues/1785&#34;&gt;a previous &amp;quot;FAQ updates wanted&amp;quot; issue&lt;/a&gt;, which was just closed as we&#39;d accomplished most of the items I had listed in there.  But, I do have several more links, questions, and topics I want covered in the FAQ, so I opened up a new issue to address those other items.  A couple people have volunteered to help add those to the FAQ, but there&#39;s plenty more pieces waiting for someone to claim them.  If you&#39;d like to help out, just drop a comment in the thread saying which entry you want to work on!&lt;/p&gt;

&lt;h2 id=&#34;me-myself-and-i&#34;&gt;Me, Myself, and I&lt;/h2&gt;

&lt;p&gt;Pretty quiet week overall.  I did finally force myself to sit down and start writing some initial exercises for the Redux workshop in April, and last night I put together a more detailed outline for the workshop&#39;s contents.  I&#39;m hoping to make good progress on material for the workshop this week.  Plus, this is that time of year when there&#39;s a lull in what sports are on TV anyway, so I don&#39;t have as much reason to be wasting evenings on the couch goofing off with a game on in the background :)&lt;/p&gt;

&lt;h2 id=&#34;obligatory-plug&#34;&gt;Obligatory Plug&lt;/h2&gt;

&lt;p&gt;My &amp;quot;Practical Redux&amp;quot; tutorial series is now &lt;strong&gt;&lt;a href=&#34;https://www.educative.io/collection/5687753853370368/5707702298738688&#34;&gt;an interactive course on Educative.io&lt;/a&gt;!&lt;/strong&gt;.  Check it out!&lt;/p&gt;

&lt;p&gt;Also, if you&#39;re in the New York city area, I&#39;ll be doing &lt;a href=&#34;https://workshop.me/2018-04-react-redux/?a=mark&#34;&gt;a &amp;quot;Redux Fundamentals&amp;quot; workshop on April 19-20&lt;/a&gt;, with other workshop locations and dates TBD later this year.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Mark&#39;s Dev Links - Issue #5</title>
      <link>https://blog.isquaredsoftware.com/2018/02/marks-dev-links-005/</link>
      <pubDate>Tue, 27 Feb 2018 10:00:00 -0500</pubDate>
      
      <guid>https://blog.isquaredsoftware.com/2018/02/marks-dev-links-005/</guid>
      <description>&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Hi, and welcome to issue #5 of Mark&#39;s Dev Links!  This is a weekly-ish email newsletter, focused on the React and Redux ecosystem, and stuff that&#39;s caught my attention.&lt;/p&gt;

&lt;h2 id=&#34;news-links-and-discussion&#34;&gt;News, Links, and Discussion&lt;/h2&gt;

&lt;h4 id=&#34;this-week-s-react-16-related-discussions&#34;&gt;This week&#39;s React 16-related discussions&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/reactjs/rfcs/issues/26&#34;&gt;Brian Vaughn: suggested pattern for fetching async data with &lt;code&gt;getDerivedStateFromProps&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/acdlite/status/964662881529679872&#34;&gt;Andrew Clark on Twitter: functional components are faster in React 16&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A couple smaller React 16-related updates this week.  Brian Vaughn wrote a good comment on Github describing how React 16 breaks up work into the &amp;quot;render&amp;quot; and &amp;quot;commit&amp;quot; phases, and which lifecycle methods are part of the &amp;quot;render&amp;quot; phase and should therefore not have side effects.  He included an example of how to structure component-level fetching logic using the new &lt;code&gt;getDerivedStateFromProps&lt;/code&gt; API.&lt;/p&gt;

&lt;p&gt;Over on Twitter, Andrew Clark chimed in on a thread that was arguing about functional components vs class components, and pointed out that in React 16, functional components do indeed have less performance overhead than class components since since they&#39;re no longer wrapped in classes, and do not need things like constructors or lifecycles.  This relates back to the &lt;a href=&#34;https://reactjs.org/blog/2015/10/07/react-v0.14.html&#34;&gt;original announcement of functional components in React 0.14&lt;/a&gt;, which promised that &amp;quot;In the future, we&#39;ll also be able to make performance optimizations specific to these components by avoiding unnecessary checks and memory allocations.&amp;quot;&lt;/p&gt;

&lt;h4 id=&#34;alternative-react-component-apis&#34;&gt;Alternative React Component APIs&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jsonnull/react-routine&#34;&gt;https://github.com/jsonnull/react-routine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ryanflorence/react-component-component&#34;&gt;https://github.com/ryanflorence/react-component-component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/mjackson/my-react&#34;&gt;https://github.com/mjackson/my-react&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jlongster/lively&#34;&gt;https://github.com/jlongster/lively&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/MuromiU/re-connect&#34;&gt;https://github.com/MuromiU/re-connect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@baronmaximilianwilleford/react-without-this-39a76b8f2160&#34;&gt;https://medium.com/@baronmaximilianwilleford/react-without-this-39a76b8f2160&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/vejersele/react-stateful-component/tree/master/packages/react-stateful-component&#34;&gt;https://github.com/vejersele/react-stateful-component/tree/master/packages/react-stateful-component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/trueadm/status/964666052062871552&#34;&gt;Dominic Gannaway on Twitter: maybe provide lifecycles to functional components?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gist.github.com/trueadm/198ae6902d2c5459e91a8e571b561b40&#34;&gt;Dominic Gannaway  on Twitter: notional independent &amp;quot;state reducer&amp;quot; component API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I saw two different alternative APIs for React components come out this week.  Jason Nall released &lt;code&gt;react-routine&lt;/code&gt;, which uses a generator-based controller approach inspired by &lt;code&gt;redux-saga&lt;/code&gt;.  Meanwhile, Ryan Florence published &lt;code&gt;react-component-component&lt;/code&gt;, which is a generic React component that lets you pass in lifecycle methods as props, like &lt;code&gt;&amp;lt;Component didMount={ ({setState}) =&amp;gt; {  } } /&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That reminded me that I&#39;ve seen a few other customized React component APIs out there, so I&#39;ve included links to those.  In particular, Michael Jackson and James Long have both been playing around with their own alternative APIs that are more functional-inspired and avoid use of &lt;code&gt;this&lt;/code&gt;.  Dominic Gannaway has made a few comments on Twitter around the eventual possibility of a functional component API that has state or lifecycles as well.&lt;/p&gt;

&lt;h4 id=&#34;redux-is-overused-twitter-discussion&#34;&gt;&amp;quot;Redux is overused&amp;quot; Twitter discussion&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/jamiebuilds/status/962673162264571904&#34;&gt;James Kyle: &amp;quot;I used to be on the Redux hype train, but now I regret it&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/jamiebuilds/status/962508139131060224&#34;&gt;James Kyle: &amp;quot;React and Redux shaped the community in a specific direction&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/housecor/status/962754389533429760&#34;&gt;Cory House: &amp;quot;Putting Redux in our company framework by default was a mistake&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/housecor/status/963122393773432832&#34;&gt;Cory House: &amp;quot;I want to clarify: Redux is great! the problem is Redux overuse&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/jevakallio/status/962968823648391168&#34;&gt;Jani Evakallio: &amp;quot;Just got back from the React thought leaders meeting, apparently we all now hate Redux&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/acemarke/status/963124151664955392&#34;&gt;Mark Erikson: &amp;quot;I&#39;m a bit frustrated by the recent complaints on Twitter.  Do people not read the FAQ or docs?&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/kyleshevlin/status/963111512511463425&#34;&gt;Kyle Shevlin: &amp;quot;All the FUD about Redux is symptomatic of an educational problem, not a problem with Redux&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/ccnokes/status/963173401173962752&#34;&gt;Cameron Nokes: &amp;quot;I think devs want to be told what to do. React/Redux aren&#39;t prescriptive, so people panic when told they&#39;re doing it wrong.&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/Jack_Franklin/status/963117353369292800&#34;&gt;Jack Franklin: &amp;quot;Some people have an urge for the &#39;one right way&#39; to build apps, when there&#39;s many ways&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Last week, Twitter broke out into a bunch of ricocheting retweets and arguments over whether Redux is overused.  As best as I can reconstruct things, here&#39;s what happened:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;James Kyle made some comments about having decided Redux was a bad idea after all.  That drew discussion, including from Dan Abramov.&lt;/li&gt;
&lt;li&gt;Cory House posted a tweet saying that his team was badly overusing Redux. That got heavily retweeted.&lt;/li&gt;
&lt;li&gt;Jani Evakallio cracked a joke about thought leaders telling everyone to rewrite from Redux, which got seemed to get retweeted by people who didn&#39;t realize it was a joke&lt;/li&gt;
&lt;li&gt;I saw a bunch of the original tweets and replies with people chiming in about Redux being overused or people moving away from Redux, and got kind of frustrated, since I&#39;ve addressed this in the Redux FAQ and several of my blog posts&lt;/li&gt;
&lt;li&gt;Kyle Shevlin and Jack Franklin had some good comments on how a lot of the issue is education, in that people don&#39;t properly understand what the purpose of Redux is and how to use it appropriately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, it was a big kerfluffle, and nothing really changed, but I guess it was interesting to see some of the different trains of thought going on out there.&lt;/p&gt;

&lt;h4 id=&#34;redux-let-s-code-a-higher-order-duck&#34;&gt;Redux: Let&#39;s Code a Higher-Order &amp;quot;Duck&amp;quot;&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@yazeedb/redux-lets-code-a-higher-order-duck-a045415bef0f&#34;&gt;https://medium.com/@yazeedb/redux-lets-code-a-higher-order-duck-a045415bef0f&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &amp;quot;ducks&amp;quot; pattern is a semi-popular approach for organizing Redux logic by putting action types, action creators, and reducers into a single file.  This post shows how to combine the &amp;quot;ducks&amp;quot; pattern with the approaches shown in the Redux docs &amp;quot;Reducing Boilerplate&amp;quot; page to create multiple instances of a duck that contains reusable list CRUD handling logic.&lt;/p&gt;

&lt;h2 id=&#34;redux-ecosystem&#34;&gt;Redux Ecosystem&lt;/h2&gt;

&lt;h4 id=&#34;kea&#34;&gt;Kea&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://kea.js.org/&#34;&gt;Kea docs: a high level abstraction between React and Redux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/keajs/kea&#34;&gt;https://github.com/keajs/kea&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@mariusandra/kea-vs-setstate-redux-mobx-dva-jumpstate-apollo-etc-4aa26ea11d02&#34;&gt;Kea vs setState, Redux, MobX, Dva, JumpState, and Apollo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://news.ycombinator.com/item?id=14859206&#34;&gt;Show HN: Kea - The power of Redux with the simplicity of MobX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://survivejs.com/blog/kea-interview/&#34;&gt;SurviveJS: Interview with Marius Andra, creator of Kea&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I&#39;ve seen many higher-level abstractions built on top of Redux.  One of the most interesting ones is Kea, which combines Redux, Reselect, and Redux-Saga under the hood to let you write &amp;quot;logic stores&amp;quot; that can be connected to React components.&lt;/p&gt;

&lt;p&gt;Kea ensures that action creators are bound up to &lt;code&gt;dispatch&lt;/code&gt;, action creator functions can double as action types using some &lt;code&gt;toString()&lt;/code&gt; magic, support sagas and selectors is built in, and the &amp;quot;ducks&amp;quot;-style structure puts related logic in one place.&lt;/p&gt;

&lt;p&gt;It&#39;s a nice-looking option for people who are using these tools together and want to simplify some of the code, or want to &amp;quot;reduce Redux boilerplate&amp;quot; in general.&lt;/p&gt;

&lt;h4 id=&#34;reselect-tools-debugging-tools-for-reselect&#34;&gt;reselect-tools: debugging tools for Reselect&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/skortchmark9/reselect-tools&#34;&gt;https://github.com/skortchmark9/reselect-tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a nifty little set of tools for debugging your Reselect selectors.  By replacing the standard Reselect &lt;code&gt;createSelector&lt;/code&gt; version with the one from &lt;code&gt;reselect-tools&lt;/code&gt;, you can visualize the flow of data between selectors.  It even has a Chrome DevTools extension too!&lt;/p&gt;

&lt;h2 id=&#34;redux-issues-spotlight&#34;&gt;Redux Issues Spotlight&lt;/h2&gt;

&lt;h4 id=&#34;new-redux-docs-build-setup&#34;&gt;New Redux Docs Build Setup!&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://redux.js.org/&#34;&gt;https://redux.js.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/reactjs/redux/pull/2837&#34;&gt;Redux #2837: New Gitbook version&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/reactjs/redux/pull/2843&#34;&gt;Redux #2843: Fix redirects in docs for previous urls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/reactjs/redux/issues/2846&#34;&gt;Redux #2846: New Gitbook version for the Redux docs - issues, tweaks, and improvements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Redux docs have always been built using Gitbook.  Gitbook has apparently been working on a new version of both the build tool and their docs editing/integration site, with a new default docs page design as well.  A Gitbook dev filed a PR to update Redux&#39;s docs to use the new beta version of Gitbook, and we merged it in.  This unfortunately broke some things, such as existing external URLs not working because the generated page links no longer end with &lt;code&gt;.html&lt;/code&gt;.  It looks like we&#39;ve got the biggest issues sorted out, and hope to get the last rough edges fixed soon.&lt;/p&gt;

&lt;p&gt;In related news, I&#39;m working on finally getting a similar build setup for the React-Redux docs in place, and I&#39;m hoping that we can start planning a revamp of those started soon.&lt;/p&gt;

&lt;h2 id=&#34;me-myself-and-i&#34;&gt;Me, Myself, and I&lt;/h2&gt;

&lt;p&gt;I just got back from an extended business trip, so I&#39;m mostly trying to relax a bit and settle back into a normal routine.&lt;/p&gt;

&lt;p&gt;I&#39;ve spent most of my time at work lately doing work on build infrastructure, tooling, and integration, but I finally had time this last week to sit down and work on a new feature.  The app uses a &lt;a href=&#34;http://blog.isquaredsoftware.com/2017/03/declarative-earth-part-2-cesium-react/&#34;&gt;3D globe library called Cesium, with data display driven by React components&lt;/a&gt;.  We had some existing functionality that showed a single image overlaid on the globe at a time.  I was able to generalize that to maintain a history of image overlays loaded, show multiple overlays on the globe at once, and allow toggling them individually.  It really was &amp;quot;just&amp;quot; a matter of a reducer that tracked items in an array, very similar to the approach I showed in &lt;a href=&#34;http://blog.isquaredsoftware.com/2017/07/practical-redux-part-10-managing-modals/&#34;&gt;Practical Redux, Part 10: Managing Modals and Context Menus&lt;/a&gt;.  I was able to knock that out in a couple days, and it was very satisfying to see it work exactly as I&#39;d anticipated :)&lt;/p&gt;

&lt;p&gt;Other than that, most of my attention for the next couple months will be focused on preparing for the first Redux workshop I&#39;ll be teaching in April, as well as the other couple talks I&#39;ll be giving in March.&lt;/p&gt;

&lt;h2 id=&#34;obligatory-plug&#34;&gt;Obligatory Plug&lt;/h2&gt;

&lt;p&gt;My &amp;quot;Practical Redux&amp;quot; tutorial series is now &lt;strong&gt;&lt;a href=&#34;https://www.educative.io/collection/5687753853370368/5707702298738688&#34;&gt;an interactive course on Educative.io&lt;/a&gt;!&lt;/strong&gt;.  Check it out!&lt;/p&gt;

&lt;p&gt;Also, if you&#39;re in the New York city area, I&#39;ll be doing &lt;a href=&#34;https://workshop.me/2018-04-react-redux/?a=mark&#34;&gt;a &amp;quot;Redux Fundamentals&amp;quot; workshop on April 19-20&lt;/a&gt;, with other workshop locations and dates TBD later this year.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Mark&#39;s Dev Links - Issue #4</title>
      <link>https://blog.isquaredsoftware.com/2018/02/marks-dev-links-004/</link>
      <pubDate>Tue, 20 Feb 2018 10:00:00 -0500</pubDate>
      
      <guid>https://blog.isquaredsoftware.com/2018/02/marks-dev-links-004/</guid>
      <description>&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Hi, and welcome to issue #4 of Mark&#39;s Dev Links!  This is a weekly-ish email newsletter, focused on the React and Redux ecosystem, and stuff that&#39;s caught my attention.&lt;/p&gt;

&lt;p&gt;In addition to last week&#39;s announcement of &lt;a href=&#34;https://workshop.me/2018-04-react-redux/?a=mark&#34;&gt;me teaching Redux workshops in partnership with Workshop.me&lt;/a&gt;, I can also announce that I&#39;ll be speaking on &amp;quot;Redux Fundamentals&amp;quot; at &lt;a href=&#34;https://www.reactathon.com/&#34;&gt;Reactathon&lt;/a&gt; in San Francisco on March 20!  See below for more details.&lt;/p&gt;

&lt;h2 id=&#34;news-links-and-discussion&#34;&gt;News, Links, and Discussion&lt;/h2&gt;

&lt;h4 id=&#34;new-react-createref-api&#34;&gt;New React &lt;code&gt;createRef&lt;/code&gt; API&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/reactjs/rfcs/pull/17&#34;&gt;RFC PR: New createRef() API for ref objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/reactjs/rfcs/blob/aeec271fa980762195ae6862971a8197a6b0347b/text/0017-new-create-ref.md&#34;&gt;RFC contents: New createRef() API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/facebook/react/pull/12162&#34;&gt;React #12162: Adds createRef() per RFC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When I started the newsletter, I really wasn&#39;t expecting it to turn into a running changelog of React API updates, but the React team just keeps merging in new features.  This week, they&#39;ve merged in a new &lt;code&gt;createRef()&lt;/code&gt; API, which is intended to act as a simpler alternative to callback refs, and as a final replacement for string refs.  The API was inspired by the Reason-React bindings, and allows creating &amp;quot;ref objects&amp;quot; that have a &lt;code&gt;value&lt;/code&gt; property that will be updated by React.  It looks like this should also get included in React 16.3 along with the other recently merged API updates.&lt;/p&gt;

&lt;h4 id=&#34;react-architecture-confessions&#34;&gt;React Architecture Confessions&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://benmccormick.org/2018/02/07/react-confessions/&#34;&gt;https://benmccormick.org/2018/02/07/react-confessions/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ben McCormick shares some well-written thoughts on mistakes he&#39;s made while working on React apps, inspired by the book &amp;quot;Clean Architecture&amp;quot;.  He lists five different mistakes, and describes what he did, why he did it, and what he should have done instead in hindsight.  Well-written advice, as always.&lt;/p&gt;

&lt;h4 id=&#34;modern-css-for-dinosaurs&#34;&gt;Modern CSS for Dinosaurs&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/actualize-network/modern-css-explained-for-dinosaurs-5226febe3525&#34;&gt;https://medium.com/actualize-network/modern-css-explained-for-dinosaurs-5226febe3525&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CSS techniques and practices have changed a lot over the years.  This article gives a historical overview of how approaches and tools have evolved and why various practices were created.  (The same author also previously wrote a similar post called &lt;a href=&#34;https://medium.com/the-node-js-collection/modern-javascript-explained-for-dinosaurs-f695e9747b70&#34;&gt;Modern JavaScript Explained for Dinosaurs&lt;/a&gt;, explaining the historial context for JS tools and build practices.)&lt;/p&gt;

&lt;h4 id=&#34;hacky-way-to-view-instagram-redux-store&#34;&gt;Hacky way to view Instagram Redux Store&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@rajsek/hacky-way-to-viewing-instagram-redux-actions-b6ae59cbafc8&#34;&gt;https://medium.com/@rajsek/hacky-way-to-viewing-instagram-redux-actions-b6ae59cbafc8&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Redux DevTools are great for debugging what&#39;s going on in a Redux app, and many people leave them turned on in production (possibly in read-only mode).  In this post, the author shows how to fiddle with a page in order to enable use of the Redux DevTools in a production app, even though the developers didn&#39;t actually turn it on themselves.  (Note: this is a great example of why you shouldn&#39;t blindly trust values from a client-side app!)&lt;/p&gt;

&lt;h2 id=&#34;redux-ecosystem&#34;&gt;Redux Ecosystem&lt;/h2&gt;

&lt;h4 id=&#34;redux-batch-dispatch-multiple-actions-with-one-subscription-update&#34;&gt;&lt;code&gt;redux-batch&lt;/code&gt;: dispatch multiple actions with one subscription update&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/manaflair/redux-batch&#34;&gt;https://github.com/manaflair/redux-batch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We&#39;re frequently asked about &lt;a href=&#34;https://redux.js.org/docs/faq/Performance.html#performance-update-events&#34;&gt;ways to cut down on the number of subscriber update notifications&lt;/a&gt;.  One useful tool for this is &lt;code&gt;redux-batch&lt;/code&gt;, which is a store enhancer that allows passing an array of actions to &lt;code&gt;dispatch&lt;/code&gt;, and only triggers the subscriber callbacks a single time after all the actions have been processed.&lt;/p&gt;

&lt;p&gt;Amusingly, I&#39;m actually half-responsible for this library existing :)  There was a very long Redux issue thread about &lt;a href=&#34;https://github.com/reactjs/redux/pull/1813&#34;&gt;the best way to add a form of dispatch batching to the Redux core&lt;/a&gt;, and as part of that thread, I whipped up a gist that swiped the structure from &lt;a href=&#34;https://github.com/tappleby/redux-batched-subscribe&#34;&gt;tappleby/redux-batched-subscribe&lt;/a&gt; and replaced the notification logic with my own approach.  That lib later got adapted by someone else and turned into &lt;code&gt;redux-batch&lt;/code&gt;.  (As an interesting side note, that thread is also where I finally had to dig into the concept of &amp;quot;store enhancers&amp;quot; enough to finally grok what they are and how they worked.)&lt;/p&gt;

&lt;h2 id=&#34;redux-issues-spotlight&#34;&gt;Redux Issues Spotlight&lt;/h2&gt;

&lt;h4 id=&#34;business-logic-in-redux&#34;&gt;Business Logic in Redux&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/reactjs/redux/issues/2796&#34;&gt;Discussion: Gaining clarity on &amp;quot;business logic&amp;quot; for FAQs &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few weeks ago I &lt;a href=&#34;https://twitter.com/acemarke/status/947563352481558533&#34;&gt;tweeted out a request for examples of &amp;quot;client-side business logic&amp;quot;&lt;/a&gt;
.  Unfortunately, I only got a few responses, but there was a resulting issue opened up to discuss the topic further.  I&#39;d love to see some more discussion of what qualifies as &amp;quot;business logic&amp;quot; and how you&#39;re currently implementing that, both with and without Redux, so that we can better answer that sort of question in the future.&lt;/p&gt;

&lt;h2 id=&#34;me-myself-and-i&#34;&gt;Me, Myself, and I&lt;/h2&gt;

&lt;h4 id=&#34;full-stack-lunch-state-of-the-redux-union&#34;&gt;Full Stack Lunch - &amp;quot;State of the Redux Union&amp;quot;&lt;/h4&gt;

&lt;p&gt;On Friday Feb 9, I was able to drop by the Full Stack Lunch San Diego meetup and give a short &amp;quot;State of the Redux Union&amp;quot; presentation.  If you&#39;re reading this newsletter you&#39;ve probably already seen most of the stuff I talked about, but it was nice to share some of this stuff in person.  If you&#39;re interested, here&#39;s &lt;a href=&#34;https://www.youtube.com/watch?v=qq4Pnjaj6_E&#34;&gt;a video of the entire meetup&lt;/a&gt; and &lt;a href=&#34;https://ibm.ent.box.com/s/l28c0evefkrjlg88s6m0z1iazkubziit&#34;&gt;the accompanying slides&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&#34;redux-fundamentals-talk-at-reactathon&#34;&gt;&amp;quot;Redux Fundamentals&amp;quot; talk at Reactathon&lt;/h4&gt;

&lt;p&gt;Since there won&#39;t be a ReactConf put on by the React team this year, the &lt;a href=&#34;https://www.reactathon.com/&#34;&gt;Reactathon conference&lt;/a&gt; has stepped up and is putting on a 3-day conference March 20-22, in San Francisco.  It&#39;ll actually be split into two parts: Tuesday is a &amp;quot;Fundamentals&amp;quot; track, while Wednesday and Thursday are an &amp;quot;Advanced&amp;quot; track.  &lt;strong&gt;I&#39;m pleased to announce that I&#39;ll be giving a 30-minute &amp;quot;Redux Fundamentals&amp;quot; talk on Tuesday, March 20!&lt;/strong&gt;  Looks like a great list of speakers for both parts of the conference, and I&#39;m excited to be a part of it.&lt;/p&gt;

&lt;h2 id=&#34;obligatory-plug&#34;&gt;Obligatory Plug&lt;/h2&gt;

&lt;p&gt;My &amp;quot;Practical Redux&amp;quot; tutorial series is now &lt;strong&gt;&lt;a href=&#34;https://www.educative.io/collection/5687753853370368/5707702298738688&#34;&gt;an interactive course on Educative.io&lt;/a&gt;!&lt;/strong&gt;.  Check it out!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Mark&#39;s Dev Links - Issue #3</title>
      <link>https://blog.isquaredsoftware.com/2018/02/marks-dev-links-003/</link>
      <pubDate>Tue, 13 Feb 2018 10:00:00 -0500</pubDate>
      
      <guid>https://blog.isquaredsoftware.com/2018/02/marks-dev-links-003/</guid>
      <description>&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Hi, and welcome to issue #3 of Mark&#39;s Dev Links!  This is a weekly-ish email newsletter, focused on the React and Redux ecosystem, and stuff that&#39;s caught my attention.&lt;/p&gt;

&lt;h2 id=&#34;announcement-live-workshops-from-workshop-me&#34;&gt;ANNOUNCEMENT: LIVE WORKSHOPS FROM WORKSHOP.ME!&lt;/h2&gt;

&lt;p&gt;I am &lt;strong&gt;&lt;em&gt;very&lt;/em&gt;&lt;/strong&gt; excited to announce that &lt;strong&gt;I will be teaching several live Redux workshops this year!!!&lt;/strong&gt;  Ryan Florence has just launched a new workshop-based training series called &lt;strong&gt;&lt;a href=&#34;https://workshop.me/?a=mark&#34;&gt;Workshop.me&lt;/a&gt;&lt;/strong&gt;, and is partnering with a who&#39;s-who list of industry experts to give in-person workshops on web development topics.  This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kent C Dodds on testing&lt;/li&gt;
&lt;li&gt;Sean Larkin on Webpack&lt;/li&gt;
&lt;li&gt;Evan You on Vue&lt;/li&gt;
&lt;li&gt;Sarah Drasner on SVGs and animations&lt;/li&gt;
&lt;li&gt;Todd Motto on Angular&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And many more!&lt;/p&gt;

&lt;p&gt;I&#39;m still kind of confused how I actually fit into that list, but I guess if you answer enough questions, eventually you sorta know what you&#39;re talking about, or at least people assume you do :)&lt;/p&gt;

&lt;p&gt;So, &lt;strong&gt;my first Redux workshop is scheduled for &lt;a href=&#34;https://workshop.me/2018-04-react-redux/?a=mark&#34;&gt;April 19-20, in New York City&lt;/a&gt;&lt;/strong&gt;, with others TBD dates and locations for later this year.&lt;/p&gt;

&lt;p&gt;I&#39;ll still keep answering questions online, of course, but I&#39;m really looking forward to this chance to help people learn Redux (and React) in person!&lt;/p&gt;

&lt;p&gt;And with that, on with the rest of the news!&lt;/p&gt;

&lt;h2 id=&#34;news-links-and-discussion&#34;&gt;News, Links, and Discussion&lt;/h2&gt;

&lt;h4 id=&#34;react-16-3-roundup&#34;&gt;React 16.3 Roundup&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/facebook/react/issues/12152&#34;&gt;React #12152: Umbrella: 16.3 and 16.4 Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/reactjs/comments/7uur43/react_163_alpha_available_on_npm/&#34;&gt;Reddit: React 16.3 alpha available on NPM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dan Abramov on Twitter:

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/dan_abramov/status/960305777968930816&#34;&gt;Use cases for &lt;code&gt;getDerivedStateFromProps&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/dan_abramov/status/960332189694087169&#34;&gt;Hints about upcoming React work&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@baphemot/whats-new-in-react-16-3-d2c9b7b6193b&#34;&gt;What&#39;s New in React 16.3 alpha&lt;/a&gt;  (and more &lt;a href=&#34;https://www.reddit.com/r/reactjs/comments/7v8onq/whats_new_in_react_163_alpha/&#34;&gt;discussion on Reddit&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The React team continues to crank out work and push forward with the post-Fiber changes to React&#39;s core APIs.  This week, React 16.3 alpha 0 was published to NPM.  Brian Vaughn and Dan Abramov answered many questions about the new APIs and behavior in a large discussion thread on Reddit.  Andrew Clark filed an issue with the roadmap for the 16.3 and 16.4 releases.&lt;/p&gt;

&lt;p&gt;Reactiflux moderator Bartosz Szczecinski wrote a good summary of the changes coming in React 16.3, how they work, and how to use them.&lt;/p&gt;

&lt;p&gt;Dan Abramov tweeted some discussion of how the new &lt;code&gt;getDerivedStateFromProps&lt;/code&gt; API might be used, and literally as I write this, just started dropping some hints about further future changes to React&#39;s behavior.&lt;/p&gt;

&lt;p&gt;Also, there&#39;s a very intriguing line item buried in Andrew&#39;s 16.3 issue:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;** Chose not to include in 16.3, but may be in 16.4 or beyond**
- New component API. We&#39;re holding off on this until we&#39;re closer to &amp;quot;feature complete,&amp;quot; a phrase which here means &amp;quot;having implemented async rendering and bytecode compilation.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &amp;quot;bytecode compilation&amp;quot; mention possibly relates to some of the work that Dominic Gannaway and Sebastian Markbage have been doing around the &lt;a href=&#34;https://prepack.io/&#34;&gt;Prepack compiler&lt;/a&gt;.  Dominic forked the JS Frameworks Benchmark repo a couple months ago, and added &lt;a href=&#34;https://github.com/trueadm/js-framework-benchmark/commit/72d9c32bbd0718f49d5535d3a634be2ea8be308e&#34;&gt;a commit that shows a React component&#39;s render method converted into opcodes&lt;/a&gt; (credit to &lt;a href=&#34;https://www.reddit.com/r/reactjs/comments/7kvtc3/react_compiled/&#34;&gt;this Reddit thread&lt;/a&gt; for bringing it to my attention).  Clearly some very interesting experimentation going on around precompiling React.&lt;/p&gt;

&lt;h4 id=&#34;more-setstate-behavior-explanation&#34;&gt;More &lt;code&gt;setState&lt;/code&gt; Behavior Explanation&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/48563650/does-react-keep-the-order-for-state-updates/48610973#48610973&#34;&gt;https://stackoverflow.com/questions/48563650/does-react-keep-the-order-for-state-updates/48610973#48610973&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Following on from last week&#39;s &lt;a href=&#34;https://github.com/facebook/react/issues/11527#issuecomment-360199710&#34;&gt;explanation of why &lt;code&gt;setState&lt;/code&gt; is async&lt;/a&gt;, Dan Abramov wrote another long explanation on Stack Overflow on when and why &lt;code&gt;setState&lt;/code&gt; calls are batched together.&lt;/p&gt;

&lt;h4 id=&#34;modern-web-podcast-s05e01-redux-and-mobx-with-tim-dorr-and-michel-weststrate&#34;&gt;Modern Web Podcast S05E01: Redux and MobX with Tim Dorr and Michel Weststrate&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=kyJKDtQUb7w&#34;&gt;https://www.youtube.com/watch?v=kyJKDtQUb7w&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A recent episode of the Modern Web Podcast featured Redux co-maintainer Tim Dorr and MobX creator Michel Weststrate talking about state management in the React world, with updates on what&#39;s happening with both libraries.  Some really good discussion here, including some thoughts on how React&#39;s async rendering and new context API may affect these libraries, what data should go into a state store, use of &lt;code&gt;combineReducers&lt;/code&gt;, and more.&lt;/p&gt;

&lt;h2 id=&#34;redux-ecosystem&#34;&gt;Redux Ecosystem&lt;/h2&gt;

&lt;h4 id=&#34;redux-subspace&#34;&gt;redux-subspace&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ioof-holdings/redux-subspace&#34;&gt;https://github.com/ioof-holdings/redux-subspace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ioof-holdings.github.io/redux-subspace/&#34;&gt;https://ioof-holdings.github.io/redux-subspace/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.slideshare.net/VivianFarrell/scaling-react-and-redux-at-ioof&#34;&gt;http://www.slideshare.net/VivianFarrell/scaling-react-and-redux-at-ioof&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mpeyper.github.io/from-monolith-to-micro-frontends-wd42/#/&#34;&gt;https://mpeyper.github.io/from-monolith-to-micro-frontends-wd42/#/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Redux&#39;s single global store approach does inherently make it harder to implement encapsulation or modularity, so I&#39;ve kept a close eye out on libraries that experiment with approaches for adding those capabilities back on top of  Redux.  &lt;code&gt;redux-subspace&lt;/code&gt; is a library that allows breaking up an application into many &amp;quot;sub-stores&amp;quot; that can be combined together at runtime, as well as providing encapsulation for different modules or pieces of domain logic.  It&#39;s particularly intended for an enterprise-type &amp;quot;micro-front-end&amp;quot; approach where you might have many different teams working on different parts of an app, but should have benefits for several other situations as well.  It also comes with integrations for React-Redux, Redux-Saga, and Redux-Observable.&lt;/p&gt;

&lt;h2 id=&#34;redux-issues-spotlight&#34;&gt;Redux Issues Spotlight&lt;/h2&gt;

&lt;h4 id=&#34;redux-addons-catalog-client-side-ui-update&#34;&gt;Redux Addons Catalog - client-side UI - UPDATE!&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/wilbertliu/redux-ecosystem&#34;&gt;https://github.com/wilbertliu/redux-ecosystem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Last week I linked to &lt;a href=&#34;https://github.com/markerikson/redux-ecosystem-links/issues/60&#34;&gt;my request for someone to build a client-side UI for my Redux addons catalog&lt;/a&gt;.  Since then, Github users @wilbertliu and @dberget have started tackling this project in earnest.  They&#39;ve already got some UI mockups and initial Markdown parsing logic in place, and are discussing planned features and behavior.  I&#39;m &lt;em&gt;really&lt;/em&gt; excited to see this moving forward, and can&#39;t wait to see this come to fruition!&lt;/p&gt;

&lt;h4 id=&#34;redux-docs-site-rebuild&#34;&gt;Redux docs site rebuild?&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/reactjs/redux/issues/2785&#34;&gt;https://github.com/reactjs/redux/issues/2785&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/reactjs/redux/issues/2591&#34;&gt;https://github.com/reactjs/redux/issues/2591&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since the last request for help worked out so well, I&#39;ll try it again :)&lt;/p&gt;

&lt;p&gt;The Redux docs site is currently built with Gitbook, but I&#39;m not particularly happy with the current build process.  I&#39;d like to investigate changing to use Gatsby or another similar static site generation tool, but don&#39;t have time to really dig into this myself.  I&#39;d love to have someone look into this for us.&lt;/p&gt;

&lt;p&gt;On a related note, the React-Redux library currently just has its API docs in a Markdown file that&#39;s linked in the repo.  I&#39;d really like to set up a separate React-Redux docs site, and drastically improve the React-Redux docs content at the same time.  There&#39;s been a bit of initial discussion for what a docs revamp might include, but I&#39;d love to get more community involvement in improving these docs.&lt;/p&gt;

&lt;h2 id=&#34;me-myself-and-i&#34;&gt;Me, Myself, and I&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: this first sentence is now &lt;em&gt;slightly&lt;/em&gt; out of date, per the announcement up top :)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not a lot to mention on my end this week.  Still on travel for work, so I&#39;m pretty busy with that.  I spent some time on Friday playing around with React 16&#39;s new error boundaries capability, and trying to see if there was a good way to display the component and code stack traces provided by &lt;code&gt;componentDidCatch&lt;/code&gt;.  I actually managed to hack together a mangled version of the &lt;code&gt;react-error-overlay&lt;/code&gt; package that showed the error info, but I&#39;d like something lighter-weight.  (If anyone&#39;s already seen a good pre-built component or package for this, let me know!)&lt;/p&gt;

&lt;p&gt;As I write this on Sunday, I&#39;ve got a very interesting React-related meeting coming up tomorrow, so that should be done by the time you see this.  Good chance there will be some things to talk about from that down the road.&lt;/p&gt;

&lt;h2 id=&#34;obligatory-plug&#34;&gt;Obligatory Plug&lt;/h2&gt;

&lt;p&gt;My &amp;quot;Practical Redux&amp;quot; tutorial series is now &lt;strong&gt;&lt;a href=&#34;https://www.educative.io/collection/5687753853370368/5707702298738688&#34;&gt;an interactive course on Educative.io&lt;/a&gt;!&lt;/strong&gt;.  Right now, Educative is having a sale - all courses are 50% off with coupon code &lt;strong&gt;LEARN2018&lt;/strong&gt; .  That includes not just my &amp;quot;Practical Redux&amp;quot; course, but many others as well.  Check it out!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Mark&#39;s Dev Links - Issue #2</title>
      <link>https://blog.isquaredsoftware.com/2018/02/marks-dev-links-002/</link>
      <pubDate>Tue, 06 Feb 2018 10:00:00 -0500</pubDate>
      
      <guid>https://blog.isquaredsoftware.com/2018/02/marks-dev-links-002/</guid>
      <description>&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Hi, and welcome to issue #2 of Mark&#39;s Dev Links!  This is a weekly-ish email newsletter, focused on the React and Redux ecosystem, and stuff that&#39;s caught my attention.&lt;/p&gt;

&lt;p&gt;Last week I mentioned I wasn&#39;t yet sure what I was going to do about older newsletter issues.  I&#39;ve decided I&#39;ll try posting them on my blog after a 1-week delay, just for visibility.  So, you&#39;ll be able to see them at both &lt;a href=&#34;https://tinyletter.com/acemarke/archive&#34;&gt;https://tinyletter.com/acemarke/archive&lt;/a&gt; and  &lt;a href=&#34;http://blog.isquaredsoftware.com/series/newsletter/&#34;&gt;http://blog.isquaredsoftware.com/series/newsletter/&lt;/a&gt; .&lt;/p&gt;

&lt;h2 id=&#34;news-links-and-discussion&#34;&gt;News, Links, and Discussion&lt;/h2&gt;

&lt;h4 id=&#34;new-react-context-implementation&#34;&gt;New React Context Implementation&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/reactjs/rfcs/pull/2&#34;&gt;https://github.com/reactjs/rfcs/pull/2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/facebook/react/pull/11818&#34;&gt;https://github.com/facebook/react/pull/11818&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/acdlite/status/957445801302618112&#34;&gt;https://twitter.com/acdlite/status/957445801302618112&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The React team has been promising for the last few years that they would eventually implement a new replacement for the existing &lt;code&gt;context&lt;/code&gt; API, which would both resolve the issues with the current behavior of &lt;code&gt;context&lt;/code&gt; and also open up new possibilities.  The RFC describing the new API was filed a couple months ago, and the RFC and corresponding React PR have just been merged.  A few key points to note about this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The API uses &amp;quot;provider/consumer&amp;quot; pairs, and is expected to be used with the &amp;quot;render props&amp;quot; form of component composition.  It also does not rely on the use of &lt;code&gt;PropTypes&lt;/code&gt; to declare values.&lt;/li&gt;
&lt;li&gt;The new API will be released in React 16.3.  If you&#39;d like to try something similar, the &lt;a href=&#34;https://github.com/ReactTraining/react-broadcast&#34;&gt;React-Broadcast&lt;/a&gt; library has been updated to use an equivalent API already.&lt;/li&gt;
&lt;li&gt;Updates to values will propagate even if there&#39;s a component in between that has returned &lt;code&gt;false&lt;/code&gt; from &lt;code&gt;shouldComponentUpdate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Andrew Clark and Kent Dodds had a Twitter conversation where Andrew confirmed that the new &lt;code&gt;context&lt;/code&gt; API is considered a first-class feature, and should be stable going forward.  Also, apparently the API will offer an advanced option for determining whether a given consumer should update, using bitmasking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You might also want to check out &lt;a href=&#34;https://tinyletter.com/kentcdodds/letters/react-s-new-context-api&#34;&gt;the latest issue of Kent C Dodds&#39;s newsletter&lt;/a&gt; as well, as he gives a bigger overview of what &lt;code&gt;context&lt;/code&gt; is and what&#39;s going on here.  (And if you&#39;re not signed up for his newsletter already, you probably should go do so now.)&lt;/p&gt;

&lt;h4 id=&#34;why-setstate-is-async&#34;&gt;Why &lt;code&gt;setState&lt;/code&gt; is Async&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/facebook/react/issues/11527#issuecomment-360199710&#34;&gt;https://github.com/facebook/react/issues/11527#issuecomment-360199710&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Several months ago, Michel Westrate filed a React issue asking for an explanation of why &lt;code&gt;setState&lt;/code&gt; is async.  This week, Dan Abramov wrote a &lt;strong&gt;fantastic&lt;/strong&gt;, detailed response that explains how React handles batching, and the kinds of scenarios that require internal consistency for correct behavior.  Highly recommended reading!&lt;/p&gt;

&lt;h4 id=&#34;react-scope&#34;&gt;React-Scope&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/React-Scope/React-Scope&#34;&gt;https://github.com/React-Scope/React-Scope&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://levelup.gitconnected.com/introducing-react-scope-a87d9f5247df&#34;&gt;https://levelup.gitconnected.com/introducing-react-scope-a87d9f5247df&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A new React devtool extension called React-Scope came out recently.  It looks like it uses the same infrastructure as the React DevTools to show a live graph of your React component tree and their data.  Seems to be a nice additional way to view the state of your application.&lt;/p&gt;

&lt;h4 id=&#34;kuker&#34;&gt;Kuker&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/krasimir/kuker&#34;&gt;https://github.com/krasimir/kuker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://krasimirtsonev.com/blog/article/debugging-your-front-end-like-is-2019&#34;&gt;http://krasimirtsonev.com/blog/article/debugging-your-front-end-like-is-2019&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Continuing the devtools theme: Krasimir Tsonev has released Kuker, a devtools extension that takes inspiration from the Redx DevTools.  However, because it uses &lt;code&gt;window.postMessage&lt;/code&gt; as the basis for its API, it can accept events and data captured from a variety of different sources.  The author has already created adapters that draw data from Redux, MobX, Redux-Saga, DOM elements, and more.&lt;/p&gt;

&lt;h2 id=&#34;redux-ecosystem&#34;&gt;Redux Ecosystem&lt;/h2&gt;

&lt;h4 id=&#34;redux-bundler&#34;&gt;Redux-Bundler&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/henrikjoreteg/redux-bundler&#34;&gt;https://github.com/henrikjoreteg/redux-bundler&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Henrik Joreteg, who helped lead development on Starbucks&#39; new PWA, has just published his own higher-level abstraction over setting up Redux.  I haven&#39;t had time to really dig through it indepth myself yet, but at first glance it looks very intriguing.  It looks like it includes a bunch of different capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;grouped action creators / reducers / selectors &amp;quot;bundles&amp;quot; in a form somewhat similar to the &amp;quot;ducks&amp;quot; pattern, with conventions for exposing them by name&lt;/li&gt;
&lt;li&gt;the ability to merge bundles together to set up the Redux store&lt;/li&gt;
&lt;li&gt;simplified binding of action creators by name, and references to selectors by name&lt;/li&gt;
&lt;li&gt;lazy-loading of bundles at runtime&lt;/li&gt;
&lt;li&gt;&amp;quot;reactor&amp;quot; logic that can trigger async behavior based on the current app state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It&#39;s already picked up 300 stars since Henrik announced it, and there&#39;s some fascinating concepts here that I&#39;m going to have to investigate further.&lt;/p&gt;

&lt;h2 id=&#34;redux-issues-spotlight&#34;&gt;Redux Issues Spotlight&lt;/h2&gt;

&lt;h3 id=&#34;redux-addons-catalog-client-side-ui&#34;&gt;Redux Addons Catalog - client-side UI?&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/markerikson/redux-ecosystem-links/issues/60#issuecomment-360991019&#34;&gt;https://github.com/markerikson/redux-ecosystem-links/issues/60#issuecomment-360991019&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My Redux addons catalog repo currently lists close to 2000 Redux-related libraries and tools - pretty much everything I&#39;ve run across that looks useful.  The downside to this is that there&#39;s many similar-looking libraries listed, and there&#39;s no easy way to compare them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I&#39;d really love to see is an interactive site that parses the links in my list, and turns them into a client-side app that allows filtering, sorting, and comparing for the different libraries in each category, based on Github and NPM stats.&lt;/strong&gt;  There&#39;s plenty of prior art for sites like that already, and I&#39;ve linked several relevant examples and useful pieces for building such a site in that thread.  I don&#39;t have time to build something like this myself, but I would &lt;em&gt;love&lt;/em&gt; to have someone put it together :)  I think it would be a real help to the Redux community.&lt;/p&gt;

&lt;p&gt;I just had a couple people contact me about working on this and it sounds like they&#39;re starting to do some initial project planning, so I&#39;m really excited to see this idea moving forward!&lt;/p&gt;

&lt;h2 id=&#34;me-myself-and-i&#34;&gt;Me, Myself, and I&lt;/h2&gt;

&lt;p&gt;I&#39;m traveling on business for the next couple weeks, so that will keep me pretty busy - I generally don&#39;t have as much time to keep tabs on what&#39;s going on in the ecosystem while I&#39;m gone.    I&#39;ll do my best to keep the newsletter going, though - would be kinda silly to post the first couple and then suddenly pause :)  (In fact, I&#39;m writing this from 30K feet right now.)&lt;/p&gt;

&lt;p&gt;I do have a couple things I&#39;m excited about ahead in the next couple months, but I can&#39;t talk about them... &lt;em&gt;yet&lt;/em&gt; :)&lt;/p&gt;

&lt;h2 id=&#34;wrapping-up&#34;&gt;Wrapping Up&lt;/h2&gt;

&lt;p&gt;That&#39;s all for this week.  At some point in the next couple weeks, I may give a bit of background for the mysterious map-like screenshots I was vague-tweeting about a few weeks ago :)&lt;/p&gt;

&lt;h2 id=&#34;obligatory-plug&#34;&gt;Obligatory Plug&lt;/h2&gt;

&lt;p&gt;My &amp;quot;Practical Redux&amp;quot; tutorial series is now &lt;strong&gt;&lt;a href=&#34;https://www.educative.io/collection/5687753853370368/5707702298738688&#34;&gt;an interactive course on Educative.io&lt;/a&gt;!&lt;/strong&gt;.  Right now, Educative is having a sale - all courses are 50% off with coupon code &lt;strong&gt;LEARN2018&lt;/strong&gt; .  That includes not just my &amp;quot;Practical Redux&amp;quot; course, but many others as well.  Check it out!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Mark&#39;s Dev Links - Issue #1</title>
      <link>https://blog.isquaredsoftware.com/2018/01/marks-dev-links-001/</link>
      <pubDate>Tue, 30 Jan 2018 10:00:00 -0500</pubDate>
      
      <guid>https://blog.isquaredsoftware.com/2018/01/marks-dev-links-001/</guid>
      <description>&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Hi, and welcome to the inaugural issue of Mark&#39;s Dev Links!  This is hopefully going to be a weekly-ish email newsletter, focused on the React and Redux ecosystem.&lt;/p&gt;

&lt;p&gt;Since it&#39;s the first issue, I&#39;m still trying to figure out exactly where I want to go with this.  The whole idea was kind of spur-of-the-moment yesterday.  I blame &lt;a href=&#34;https://twitter.com/goshakkk&#34;&gt;Gosha Arinich&lt;/a&gt;, who&#39;s been poking me to try out a mailing list for a while,and of course &lt;a href=&#34;https://twitter.com/kentcdodds&#34;&gt;Kent C Dodds&lt;/a&gt;&#39;s  newsletter is an inspiration as well.&lt;/p&gt;

&lt;p&gt;I&#39;m generally picturing a format along these lines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A few selected articles and discussions of interest, with the articles probably drawn from updates to my &lt;a href=&#34;https://github.com/markerikson/react-redux-links&#34;&gt;React/Redux links list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;One or more highlighted Redux-related addons or libraries, similarly drawn from updates to my &lt;a href=&#34;https://github.com/markerikson/redux-ecosystem-links&#34;&gt;Redux addons catalog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Possibly a spotlight on an open Redux issue, or status of the library&lt;/li&gt;
&lt;li&gt;Any new articles or updates I&#39;ve posted to my own blog&lt;/li&gt;
&lt;li&gt;Quick recap of what I&#39;m up to and what I&#39;ve been working on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The archived newsletters will be available at &lt;a href=&#34;https://tinyletter.com/acemarke&#34;&gt;https://tinyletter.com/acemarke&lt;/a&gt; , assuming I&#39;ve set this up right.  I&#39;m also still debating whether or not to post them on my blog.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Since you&#39;re seeing this, I did indeed decide to post this on my blog, on a one-week delay.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Definitely open to feedback and suggestions for stuff you&#39;d like to see in these newsletters.&lt;/p&gt;

&lt;p&gt;So with that in mind, let&#39;s get to it!&lt;/p&gt;

&lt;h2 id=&#34;news-links-and-discussion&#34;&gt;News, Links, and Discussion&lt;/h2&gt;

&lt;h4 id=&#34;react-lifecycle-changes-and-async-behavior&#34;&gt;React Lifecycle Changes and Async Behavior&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/reactjs/rfcs/pull/6&#34;&gt;https://github.com/reactjs/rfcs/pull/6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/facebook/react/pull/12028&#34;&gt;https://github.com/facebook/react/pull/12028&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The React team has been broadly hinting that the upcoming async rendering behavior is going to lead to major changes in how React works, and that the changes will impact the entire React ecosystem.  That&#39;s moving forward, as the RFC for new async-safe lifecycle methods has been merged in.  All the &lt;code&gt;componentWill*&lt;/code&gt; methods will be renamed to &lt;code&gt;UNSAFE_componentWill*&lt;/code&gt;, and a new static &lt;code&gt;getDerivedStateFromProps&lt;/code&gt; method will be added as a replacement.  Expect more changes to come.&lt;/p&gt;

&lt;h4 id=&#34;webpack-4-alpha&#34;&gt;Webpack 4 Alpha&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/webpack/webpack/issues/6357&#34;&gt;https://github.com/webpack/webpack/issues/6357&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://twitter.com/TheLarkInn/status/954838868569702400&#34;&gt;https://twitter.com/TheLarkInn/status/954838868569702400&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tobias Koppers has been cranking out work on Webpack v4.  It will include &amp;quot;zero-config&amp;quot; default behavior out of the box, drop the old &lt;code&gt;CommonsChunkPlugin&lt;/code&gt; in favor of a new chunking/code-splitting approach, and a &lt;em&gt;lot&lt;/em&gt; more.&lt;/p&gt;

&lt;h4 id=&#34;redux-saga-testing&#34;&gt;Redux Saga Testing&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.scottlogic.com/2018/01/16/evaluating-redux-saga-test-libraries.html&#34;&gt;http://blog.scottlogic.com/2018/01/16/evaluating-redux-saga-test-libraries.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Looks at several ways to approach testing sagas, and how specific saga test helper libraries use those approaches.  Includes a helpful table listing which approaches each helper library supports.&lt;/p&gt;

&lt;h2 id=&#34;redux-ecosystem&#34;&gt;Redux Ecosystem&lt;/h2&gt;

&lt;h4 id=&#34;immer-immutability-through-mutability&#34;&gt;Immer: Immutability through Mutability&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/mweststrate/immer&#34;&gt;https://github.com/mweststrate/immer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hackernoon.com/introducing-immer-immutability-the-easy-way-9d73d8f71cb3&#34;&gt;https://hackernoon.com/introducing-immer-immutability-the-easy-way-9d73d8f71cb3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@Tetheta/immutability-through-mutability-immer-redux-3e14246c6506&#34;&gt;https://medium.com/@Tetheta/immutability-through-mutability-immer-redux-3e14246c6506&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the major pain points with Redux has been the need to update data immutably, which &lt;a href=&#34;https://redux.js.org/docs/recipes/reducers/ImmutableUpdatePatterns.html&#34;&gt;becomes more difficult when working with nested data&lt;/a&gt;.  There&#39;s &lt;a href=&#34;https://github.com/markerikson/redux-ecosystem-links/blob/master/immutable-data.md#immutable-update-utilities&#34;&gt;many existing immutable update utility libs&lt;/a&gt;, most of which take string key paths to indicate what part of a nested data structure to update.&lt;/p&gt;

&lt;p&gt;Michel Westrate, author of MobX, has released a new library called Immer. It uses ES6 proxies to let you write normal mutative code within a callback, and tracks all of the changes you&#39;re making.  It then applies those changes as proper immutable updates to safely generate the new state.  As an example, this code is perfectly correct for use in a Redux reducer:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-js&#34;&gt;import produce from &amp;quot;immer&amp;quot;;

// later
const nextTodos = produce(todos, draft =&amp;gt; {
    draft.push({ text: &amp;quot;learn immer&amp;quot;, done: true })
    draft[1].done = true
})
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I haven&#39;t had a chance to use it yet myself, but it appears to be a great solution for updating state immutably.  Should be good for use in Redux reducers, React components, or anywhere else you need to do immutable updates.&lt;/p&gt;

&lt;h2 id=&#34;redux-issues-spotlight&#34;&gt;Redux Issues Spotlight&lt;/h2&gt;

&lt;h3 id=&#34;redux-4-0-beta&#34;&gt;Redux 4.0 Beta !&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/reactjs/redux/releases/tag/v4.0.0-beta.1&#34;&gt;https://github.com/reactjs/redux/releases/tag/v4.0.0-beta.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tim Dorr has put out Redux 4.0.0 beta 1.  It&#39;s primarily cleanup around the edges - updated TypeScript typings, dropping Lodash&#39;s &lt;code&gt;_.isPlainObject&lt;/code&gt; for a homegrown version that&#39;s faster, and various other mostly internal fixes.  Try it out and let us know if you find any problems.&lt;/p&gt;

&lt;h2 id=&#34;me-myself-and-i&#34;&gt;Me, Myself, and I&lt;/h2&gt;

&lt;p&gt;(I&#39;ll hopefully figure out a better name for this section eventually.  This is what you get for signing up for the first issue :) )&lt;/p&gt;

&lt;p&gt;My schedule for the next few months is starting to fill up a bit.  I&#39;ve agreed to give my &lt;a href=&#34;http://blog.isquaredsoftware.com/2017/02/presentation-react-redux-intro/&#34;&gt;&amp;quot;Intro to React and Redux&amp;quot;&lt;/a&gt; presentation at a couple of local meetups in March and May.  I just submitted a conference proposal for the near future, and we&#39;ll see how that pans out.  Finally, I&#39;m hoping to start teaching some Redux workshops later this year, and I&#39;m bookmarking everything Kent C Dodds has ever written on the topic :)  I actually &lt;a href=&#34;https://github.com/kentcdodds/ama/issues/355&#34;&gt;asked Kent a question about planning for workshops on his AMA repo&lt;/a&gt;, and he was kind enough to write a very detailed answer.&lt;/p&gt;

&lt;h3 id=&#34;experiments-with-randomness-in-redux&#34;&gt;Experiments with Randomness in Redux&lt;/h3&gt;

&lt;p&gt;Someday, if I actually have free time, I&#39;ve got an old side project I&#39;d like to reimplement.  It&#39;s a board game that has dice rolling in it, and that means randomness.&lt;/p&gt;

&lt;p&gt;Now, random numbers in Redux are tricky, because the randomness needs to live outside reducers in order for them to actually be &amp;quot;pure&amp;quot;.  At a minimum, we want the exact same output for the exact same &lt;code&gt;(state, action)&lt;/code&gt; input.  In theory, there shouldn&#39;t be any effects on the outside world at all, either.&lt;/p&gt;

&lt;p&gt;There&#39;s two good articles on randomness in Redux that I&#39;ve seen: &lt;a href=&#34;https://daveceddia.com/random-numbers-in-redux/&#34;&gt;Roll the Dice: Random Numbers in Redux&lt;/a&gt; and &lt;a href=&#34;https://blog.ohlman.io/random-in-redux-b6b9932ad061&#34;&gt;Random in Redux&lt;/a&gt;.  However, what neither of these gives us is an easy way to generate an arbitrary amount of random numbers in a single dispatch, repeatably.&lt;/p&gt;

&lt;p&gt;Yesterday I was playing around with the idea of a Redux middleware that would store a random number generator instance that could have its internal state saved and updated, and I seem to have gotten something working.  I&#39;ve put the whole code in a gist at &lt;a href=&#34;https://gist.github.com/markerikson/9951faf2fa8f04f9a197784d47ee9ad3&#34;&gt;https://gist.github.com/markerikson/9951faf2fa8f04f9a197784d47ee9ad3&lt;/a&gt; , but here&#39;s the highlights:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-js&#34;&gt;import seedrandom from &amp;quot;seedrandom&amp;quot;;

export const randomMiddleware = store =&amp;gt; {
    let prng = seedrandom(null, {state : true});

    return next =&amp;gt; action =&amp;gt; {

        const {meta = {}} = action;

        const rngState = prng.state();

        const newMeta = {...meta, rngState};
        const newAction = {...action, meta : newMeta};

        const result = next(newAction);

        const newRngState = newAction.meta.rngState || rngState;
        prng = seedrandom(null, {state : newRngState});

        return action;
    }
}

function higherOrderRandomReducer(reducer) {
    return function (state, action) {
        if(action.meta &amp;amp;&amp;amp; action.meta.rngState) {
            action.meta.prng = seedrandom(null, {state : action.meta.rngState});
        }

        const actualResult = reducer(state, action);

        if(action.meta &amp;amp;&amp;amp; action.meta.prng) {
            const rngState = action.meta.prng.state();
            action.meta.rngState = rngState;
        }

        return actualResult;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The trick here is that whenever an action is dispatched, the middleware serializes the PRNG&#39;s internal state and adds it to the &lt;code&gt;meta&lt;/code&gt; field in the action.  When the action reaches the reducers, the higher-order reducer instantiates a new copy of the PRNG, and uses the serialized state to initialize it.  When the reducer returns, we serialize this second PRNG instance&#39;s state, and overwrite the state value in the action.  When the action gets back to the middleware, it can then update/re-create its own PRNG instance with that state.&lt;/p&gt;

&lt;p&gt;It&#39;s fragile, it&#39;s unoptimized, and it&#39;s admittedly a really indirect way of going about handling random numbers.  (You can also argue that having the reducer modify the action with the updated PRNG state makes it &amp;quot;impure&amp;quot;, and you&#39;d have a good case.)  But, I think it&#39;s interesting and useful enough to flesh out, and it does actually (mostly) fulfill the desire to let a reducer generate as many random numbers as it wants based just on the contents of the action.  If you try out the part of the gist where I dispatch multiple &lt;code&gt;&amp;quot;INCREMENT&amp;quot;&lt;/code&gt; actions and then re-apply the saved PRNG state, you can see it repeatably generates the same numbers each time.  This would also be useful for testing purposes.&lt;/p&gt;

&lt;h2 id=&#34;wrapping-up&#34;&gt;Wrapping Up&lt;/h2&gt;

&lt;p&gt;So, there you have it for issue #1.  Can&#39;t guarantee they&#39;ll all be this long, or that they&#39;ll come out on exactly a weekly schedule, but hopefully I&#39;ll be able to put them out on a consistent basis.  As I said earlier, I&#39;d love to hear feedback and suggestions for what you&#39;d like to see.&lt;/p&gt;

&lt;p&gt;(Also, I apparently don&#39;t know how to write anything &amp;quot;short&amp;quot;.)&lt;/p&gt;

&lt;h2 id=&#34;obligatory-plug&#34;&gt;Obligatory Plug&lt;/h2&gt;

&lt;p&gt;My &amp;quot;Practical Redux&amp;quot; tutorial series is now &lt;strong&gt;&lt;a href=&#34;https://www.educative.io/collection/5687753853370368/5707702298738688&#34;&gt;an interactive course on Educative.io&lt;/a&gt;!&lt;/strong&gt;.  Right now, Educative is having a sale - all courses are 50% off with coupon code &lt;strong&gt;LEARN2018&lt;/strong&gt; .  That includes not just my &amp;quot;Practical Redux&amp;quot; course, but many others as well.  Check it out!&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>