Зачем передают объект в функцию вот так?
Это spread оператор. Такая запись просто создаёт объект, в который копирует все ключи из другого объекта. Это просто синтаксический сахар для Object.assign({}, anyObj);
Очевидно, так надо делать - когда это нужно. И не надо делать, когда это не нужно. Если надо скопировать объект, скопировать объект и добавить в него новые ключи, объединить 2 объекта. Развитие этих конструкций получило после популяризации философии immutable.
https://learn.javascript.ru/destructuring#operator...
Не нужно использовать spread без понимания процесса - однозначно.