markerikson / marks-dev-blog-comments

Comments for my blog
4 stars 0 forks source link

Mark's Dev Links - Issue #1 · Mark's Dev Blog #25

Open markerikson opened 4 years ago

markerikson commented 4 years ago

Original author: Just RAG @adrianwiechec
Original date: 2018-01-30T22:07:17Z

For handling random numbers in Redux, when the actions need to just be log-traceable, not neccessarily repeatable, a simple middleware putting random numbers in actions marked with `meta.roll=true` could be enough:
https://github.com/justrag/...

markerikson commented 4 years ago

Original date: 2019-03-14T02:43:03Z

(NECRO THREAD REPLY!)

Yep, that's another way to do it.

What led me in this direction is wanting to be able to handle an arbitrary number of potential die rolls in the reducer that wouldn't be known beforehand.

For example, imagine a Risk game, where two territories full of armies are about to fight each other. There would be a _lot_ of dice rolls involved to finish the battle.

We _could_ model this by having the game logic live in a thunk or saga, roughly:


while(true) {
const [redArmies, blueArmies] = selectArmies(getState());
if(!redArmies || !blueArmies) break;

const blueArmiesToRemove = rollDice();
const redArmiesToRemove = rollDice();

dispatch({type : "REMOVE_ARMEIS", payload : {blueArmiesToRemove, redArmiesToRemove}})
}

But, that leads to a lot of dispatching.

If we feed in a seeded RNG, the reducer could execute all those dice rolls itself in one dispatch, and the results would be predictable for a given seed (ie, "red always wins with 5 armies remaining").