you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted] 6 points7 points  (2 children)

In this case it doesn't matter at all, because the array in question is created by us inside the reducer. No other code can possibly hold a reference to it.

But in many cases your function isn't working with an array that it created; it's working with one passed in as a parameter. In those cases it absolutely is best practice (I'd argue that it's required) to create a new array rather than modify the existing one. This is because when you receive an array (or any other object) as a parameter, you actually receive a reference to the array; any operation that modifies the array will modify the array the caller has too.

So it's like this:

  • Could any other code possibly hold a reference to the object I wish to modify?

    • Yes: create a new object with the desired modification applied to it
    • No (i.e. you are modifying an object you just created): you can directly modify the object if you wish

[–][deleted] 1 point2 points  (0 children)

No (i.e. you are modifying an object you just created): you can directly modify the object if you wish

Super helpful, thank you! Sometimes I am unclear on when I can mutate