react not how functions create component javascript ecmascript-6 react-jsx arrow-functions

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) => ({})

Ver pruebas

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