Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

306
Visualizações
¿Cuál es la diferencia entre pasar un argumento como objeto frente a una cadena en una función?

Tengo a continuación un método que registra a un usuario con su correo electrónico y contraseña y crea un documento en Firebase cuando el usuario ingresa su información en un formulario y hace clic en enviar:

 const onSubmitHandler = async (e) => { e.preventDefault(); try { const { user } = await createAuthUserWithEmailAndPassword(email, password); console.log(user, 'user') await createUserDocumentFromAuth(user, { displayName }) }catch(err) { if(err === 'auth/email-already-in-use') { alert('Account with this email already exists'); return; }else { console.log(err) } } }

Para esta función llama:

 await createUserDocumentFromAuth(user, { displayName })

donde displayName puede ser una cadena, como ElonMusk . En el createUserDocumentFromAuth real, llamo al método setDoc, que es uno de Firebase para establecer un documento de usuario:

 export const createUserDocumentFromAuth = async ( userAuth, additionalInfo = {} ) => { if(!userAuth) return; console.log(additionalInfo, 'additionalInfo') const userDocRef = doc(db, 'users', userAuth.uid); const userSnapshot = await getDoc(userDocRef); if(!userSnapshot.exists()) { const { displayName, email } = userAuth; const createdAt = new Date(); try { // set the doc here await setDoc(userDocRef, { displayName, email, createdAt, ...additionalInfo }); } catch(err) { console.log('err creating the user', err) } }; return userDocRef; }

La razón por la que pasé { displayName } manualmente es porque hay un caso en el que la respuesta del servidor a createAuthUserWithEmailAndPassword(email, password) tiene displayName null , pero queremos que el usuario tenga un displayName registrado en la base de datos.

Mi pregunta es:

  1. ¿Por qué displayName solo funciona cuando se pasa como un objeto y no solo en su forma normal? Por ejemplo:
 await createUserDocumentFromAuth(user, { displayName })

reemplazará el displayName: null Pero no cuando paso:

 await createUserDocumentFromAuth(user, displayName)
  1. ¿Cómo se llama esta técnica en JavaScript?
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Si observa createUserDocumentFromAuth , verá que espera dos argumentos userAuth e additionalInfo , se espera que ambos argumentos sean objetos.

Luego usa datos de AdditionalInfo para additionalInfo /sobrescribir cualquier cosa en userAuth cuando llama al método setDoc() .

Entonces, recomendaría agregar

 console.log(userDocRef, { displayName, email, createdAt, ...additionalInfo });

para ver qué datos se envían a setDoc()

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda