DEV Community

Telmo Goncalves
Telmo Goncalves

Posted on

Destructure Everything

Destructuring is a convenient way of extracting multiple values
from data stored in objects and Arrays.


Let's take a look on how to destructure an object:

const info = { name: 'Telmo', age: 33, twitterHandler: '@telmo' }

// Destructure data from `info`
const { name, age, twitterHandler } = info

console.log(name, age, twitterHandler) // Telmo 33 @telmo
Enter fullscreen mode Exit fullscreen mode

What we've done here? Instead of accessing the data through info.name, info.age, etc;

We extracted the data from info, this way you prevent calling info.X multiple times.

Let's mock an example where you're making an API call, for this we'll be using JSONPlaceholder, you can take a look to figure out what it does.

A straight forward example is the one provided on the homepage, where we can fetch data from https://jsonplaceholder.typicode.com/todos/1 and it should return something like:

{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}
Enter fullscreen mode Exit fullscreen mode

Let's build a simple component so we can then extract the data from the API call:

import React from 'react'

export default function MyComponent() {
  return (
    <div>My amazing component 🚀</div>
  )
}
Enter fullscreen mode Exit fullscreen mode

Great, now let's assume the data from the API call is being passed to the component through props, we can either extract the data before we return our component:

import React from 'react'

export default function MyComponent(props) {
  const { userId, id, title, completed } = props

  return (
    <div>
      Task ID: {id}
      Created by user ID: {userId}
      Task title: "{title}"
      Completed: {completed}
    </div>
  )
}
Enter fullscreen mode Exit fullscreen mode

Looks great, but we can still save at least one least in your code, take a look:

import React from 'react'

export default function MyComponent({ userId, id, title, completed }) {
  return (
    <div>
      Task ID: {id}
      Created by user ID: {userId}
      Task title: "{title}"
      Completed: {completed}
    </div>
  )
}
Enter fullscreen mode Exit fullscreen mode

By extracting the data directly on MyComponent(), we no longer need to extract the data through const { ... } = props.


Let's play with brackets (Arrays)

Check the example bellow and notice the comments:

const myTags = ['React', 'Next', 'Gatsby']

// Get first element of the array
console.log(myTags[0]) // React

// Destructuring the array
const [tag] = myTags

console.log(tag) // React
Enter fullscreen mode Exit fullscreen mode

Looks way better.

Going a little further, I found out about this just a few days ago, and it's
amazing how good the code looks using this. Let's imagine the following data structure:

"deliveries": [
  {
    "id": 337948,
    "shipments": [
      {
        "number": "FOO-5905959044",
        "products": [
          {
            "title": "Apple Pie"
          },
          {
            "title": "6 Pack Coronas"
          },
          {
            "title": "Doritos"
          },
          {
            "title": "Burgers"
          }
        ]
      }
    ]
  }
]
Enter fullscreen mode Exit fullscreen mode

Let's destructure this sucker using the same component as before, assuming this data is being passed to the component props:

// Destructuring happening right here within `MyComponent()`
export default function MyComponent({
  data: { deliveries }
}) {
  return (
    deliveries.map(delivery => {
      const {
        id,
         // Beauty of destructuring arrays
        shipments: [shipment]
      } = delivery
      // Destructuring data from the first array of `shipments`
      const { number, products } = shipment

      return (
        <div>
          Order with ID {id} and tracking shipment
          number {number}

          <ul>
            {products.map(({ title }) => ( // Destructuring happening here within `()`
              <li>{title}</li>
            ))}
          </ul>
        </div>
      )
    })
  )
}
Enter fullscreen mode Exit fullscreen mode

Hope it's clear enough and helped you in some way.

Follow me on Twitter 🔥

Top comments (1)

Collapse
 
micadev123 profile image
micaDev123

Very clear thanks to this!