DEV Community

Discussion on: JS Clean Code tip: Don't use tuples for returned objects

Collapse
ronnewcomb profile image
Ron Newcomb • Edited on

Counterpoint: call the same function multiple times. Without tuples, now you have name clashes:

const MyComponent = () => {
    const { data: customers, error: custError } = useAsync(getCustomers);
    const { data: order, error: ordError } = useAsync(getOrders);
    const { data: invoices, error: invError } = useAsync(getInvoices);
Enter fullscreen mode Exit fullscreen mode

Returning tuples makes this issue go away. This is why React uses tuples for many hooks.

Collapse
latobibor profile image
András Tóth Author

This is a very valid, but a very rare use case. My point above is that whenever you use tuples you open a class of problems about "magic location". So you have to use them very sparingly with a lot of consciousness.

Here you also demonstrate that it is highly unlikely that const { data: customerError, error: customers } = useAsync(getCustomers) would happen, since it would look odd and you will not fail it.

Lastly in the example above, why don't use transform data inside getCustomers already so it returns {customers, customerError} instead? What if you realize you need to return more than two objects?

So, my point is: use it very rarely and very carefully.