DEV Community

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

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.

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.