> In Redux, there are actions, which are strings, that get passed to a > reducer, which mutates the states. My coworker and I inadvertently added the > same action name, "LOADING" on the same page, but in two different files. > This led to a bug when both my modal and his search results would be loading > at the same time, but since they were never both visible, we didn't catch the > bug.
can you explain in code how either enum or symbols could solve your problem? reading up on how reducers work @ https://redux.js.org/basics/reducers#handling-more-actions <https://redux.js.org/basics/reducers#handling-more-actions>, i'm guessing the problematic code looks like the following. ```js // module spinner.js var action = { type: 'LOADING', ... }; // module search.js var action = { type: 'LOADING', ... }; // module main.js switch (action.type) { case 'LOADING': // inadverdently run both // spinner-loading and // search-result-loading actions ... break; } ``` its not obvious to me how enums/symbols could be use in a less-complicated solution, than simply renaming action.type in your case with more descriptive names that won’t collide (e.g. 'LOADING_SPINNER', ‘LOADING_SEARCH_RESULT'). kai zhu kaizhu...@gmail.com > On 10 Jun 2018, at 11:26 AM, Michael J. Ryan <track...@gmail.com> wrote: > > Just use symbols for your action type > > On Sat, Jun 9, 2018, 14:21 Doug Wade <douglas.b.w...@gmail.com > <mailto:douglas.b.w...@gmail.com>> wrote: > Hello friends! > > I had a bug the other day on my team. We use redux <https://redux.js.org/> > to manage the state on our application <https://resumes.indeed.com/>, which > is maintained by a large team. In Redux, there are actions, which are > strings, that get passed to a reducer, which mutates the states. My coworker > and I inadvertently added the same action name, "LOADING" on the same page, > but in two different files. This led to a bug when both my modal and his > search results would be loading at the same time, but since they were never > both visible, we didn't catch the bug. My coworker refactored his feature, > and broke my feature, such that rather than displaying a spinner, we went > straight to an empty results page, even when there were results. > > In other languages, like the language I use most at work, Java, we would > instead use a language construct called an enum > <https://en.wikipedia.org/wiki/Enumerated_type> in this situation so that the > two different sets of actions weren't equal to each other. I did some > research into some previous discussions on this > <https://esdiscuss.org/topic/enums> topic, and it seems like the discussion > has been broadly in favor of it. I also noted that enum is a reserved > keyword > <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Keywords>, > which indicates some intention to add enums to the language. > > As such, I've spent some time working on a proposal > <https://github.com/doug-wade/proposal-enum-definitions> for adding enums to > ECMAScript. It is very heavily based on the work by rauschma > <https://github.com/rauschma/enums/blob/master/enums.js>, stevekinney > <https://github.com/stevekinney/ecmascript-enumerations> and rwaldron > <https://github.com/rwaldron/proposal-enum-definitions>. I wasn't sure if I > was using all the right words when writing the proposal, so to help express > myself better, I also spent some time writing a babel plugin > <https://github.com/doug-wade/babel/tree/babel-plugin-proposal-enum> that > uses a polyfill <https://github.com/doug-wade/enum-polyfill> against which > I've written a small test suite > <https://github.com/doug-wade/enum-unit-tests> (if you would like to run > them, you'll need to link the polyfill and the babel plugin into the tests). > Please do not take these as any indication of "done-ness", I wrote them to > understand how I would expect an enum in javascript to behave, and am willing > and eager to make changes as I get suggestions. I do, however, feel I have > done as much as I can on my own, and would like help in considering the > proposal, especially whether it contains any footguns, undefined behavior, or > things that would be surprising to newer developers, and helping me identify > what work is to be done to make this a "real" proposal. > > All the best, > Doug Wade > > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org <mailto:es-discuss@mozilla.org> > https://mail.mozilla.org/listinfo/es-discuss > <https://mail.mozilla.org/listinfo/es-discuss> > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss