javascript - not - react class functions
FunciĆ³n de flecha sin llaves. (3)
En su primer ejemplo, el lado derecho de la función de flecha muestra una expresión única que está encerrada por un operador de agrupación:
const foo = (params) => ( <span> <p>Content</p> </span> )
;
Un caso similar similar sería el siguiente:
const foo = (params) => (<span><p>Content</p></span>)
;
Una distinción, en los casos anteriores que usan expresiones simples, es que el lado derecho es el valor devuelto de la función .
Por otro lado, si usa llaves, JavaScript lo entenderá como una declaración:
const foo = (params) => {} // this is not an object being returned, it''s just an empty statement
Por lo tanto, el uso de sentencias es un buen comienzo para que tenga código, varias líneas, y requerirá el uso de "retorno" si la función está destinada a devolver valor:
const foo = (params) => {
let value = 1;
return value;
}
En caso de que quieras devolver un objeto vacío en la forma más corta:
const foo = (params) => ({})
Soy nuevo en ES6 y React y sigo viendo las funciones de flecha. ¿Por qué algunas funciones de flecha usan llaves después de la flecha gruesa y algunas usan paréntesis? Por ejemplo:
const foo = (params) => (
<span>
<p>Content</p>
</span>
);
contra
const handleBar = (e) => {
e.preventDefault();
dispatch(''logout'');
};
¡Gracias por cualquier ayuda!
Los paréntesis están devolviendo un solo valor, las llaves están ejecutando varias líneas de código.
Su ejemplo parece confuso porque utiliza JSX, que se parece a múltiples "líneas", pero en realidad se compila en un solo "elemento".
Aquí hay algunos ejemplos más que todos hacen lo mismo:
const a = (who) => "hello " + who + "!";
const b = (who) => (
"hello " +
who +
"!"
);
const c = (who) => {
return "hello " + who + "!";
};
También a menudo verá paréntesis alrededor de los literales de objetos porque es una manera de evitar que el analizador lo trate como un bloque de código:
const x = () => {} // Does nothing
const y = () => ({}) // returns an object
También se pueden usar llaves para evitar que una función de flecha de una sola línea devuelva un valor, o para que sea obvio para el siguiente desarrollador que una función de flecha de una sola línea no debe devolver nada.
Por ejemplo:
const myFunc = (stuff) => { someArray.push(stuff) }
const otherFunc = (stuff) => someArray.push(stuff)
console.log(myFunc()) // --> logs undefined
console.log(otherFunc()) // --> logs result of push which is new array length