Destructuring
Destructuring nos permite extraer elementos concretos de un array o de un objeto.
Por ejemplo con arrays:
Guardar los elementos de un array en variables
const [year, month, day] = [2022, 1, 3];
// year = 2022, month = 1, day = 3
Incluso ignorando algunos valores
const [year, , day] = [2022, 1, 3];
// year = 2022, day = 3
Guardar el primer elemento de un array
const [first] = [4, 7, 2];
// first = 4
Guardar la respuesta de una función
const [name, setName] = useContext("Javi");
// name = "Javi", setName = function
Extraer variables de un parámetro array
const a = { name: "Javi", num: 1 };
// Object.entries(a) = [
// ["name", "Javi"],
// ["num", 1],
// ];
Object.entries(a).forEach(([key, value]) => {
// key = "name", value = "Javi"
// key = "num", value = 1
});
Intercambiar el valor de dos variables
[screen, backgroundBuffer] = [backgroundBuffer, screen];
Y también con objetos:
const { a, c } = { a: 1, b: 2, c: 3, d: 4 };
// a = 1, c = 3
Incluso a varios niveles
const response = { error: { message: "failed" } };
const {
error: { message },
} = response;
// message = "failed"
Cambiándole el nombre a la variable (alias)
const response = { error: { message: "failed" } };
const {
error: { message: errMsg },
} = response;
// errMsg = "failed"
Y combinando objetos y arrays
const errors = [{ message: "field required" }, { message: "invalid date" }];
const [{ message }] = errors;
// message = "field required"
Extraer parámetros:
function logUser({ name, role }) {
console.log(name, role);
}
const user = {
name: "Katie",
surname: "Mitchell",
age: 18,
role: "World saver",
// ...
};
logUser(user); // Katie World saver
Extraer props de un componente de React:
function ReactComponent({ label, value }) {
// ...
}
<ReactComponent label="name" value="Javi" />;
Nombres de propiedad computados
Veamos el siguiente código
const createRandomUser = (attributeName, value) => {
const user = {
name: randomName(),
age: randomAge(),
}
user[attributeName] = value;
return user;
}
Para establecer attributeName
a value
hemos tenido que añadir una nueva asignación después de la inicialización del objeto.
Ahora sin embargo podemos usar nombres de propiedad computados utilizando corchetes []
, veamos:
const createRandomUser = (attributeName, value) => ({
name: randomName(),
age: randomAge(),
[attributeName]: value
})
Además ahora cuando queremos establecer un atributo en un objeto que ya tenemos almacenado en una variable con el mismo valor podemos ahorrarnos los dos puntos y la parte derecha.
Por ejemplo:
const name = "Katie";
const age = 18;
const user = {
name: name, // ⛔️
age: age // ⛔️
}
Puede escribirse como:
const name = "Katie";
const age = 18;
const user = {
name,
age
}
Top comments (0)