Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

130
Views
cómo refactorizar correctamente accesorios/condiciones para una lectura más fácil React/Js

Me gustaría explicar mi problema del día.

Tengo un elemento y dentro tengo 2 condiciones en accesorios

cuando reutilizo el componente, llamo a los accesorios socialSupervisor o socialOperator .

funciona perfectamente

por otro lado, me parece largo de leer, por lo que estoy buscando una forma de refactorizar para tener 0 accesorios o solo 1.
Estoy abierto a cualquier propuesta muchas gracias.

 <p> {socialSupervisor && (!isLoading && lastMessage?.type === "text" && lastMessage?.author?.type === "supervisor" && lastMessage?.author?._id === authUser._id ? ( <span> Moi: </span> ) : lastMessage?.author?.type === "operator" ? ( <span> conseiller: {lastMessage?.author?.name}: </span> ) : lastMessage?.author?.type === "supervisor" ? ( <span> superviseur: {lastMessage?.author?.name}: </span> ) : ( "" ))} {socialOperator && (!isLoading && lastMessage?.type === "text" && lastMessage?.author?.type === "operator" ? ( <span> Moi: </span> ) : lastMessage?.author?.type === "supervisor" ? ( <span> superviseur: {lastMessage?.author?.name}: </span> ) : ( "" ))} </p>
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Una mejora puede ser:

 function getLabel(type) { switch (type) { case "operator": return "conseiller"; case "supervisor": return "superviseur"; case "me": return 'Moi'; } } function renderSocialSupervisor() { const isMe = lastMessage?.author?._id === authUser._id; const label = getLabel(isMe ? 'me' : lastMessage?.author?.type); return isLoading || lastMessage?.type !== "text" ? null : ( <span>{label}: {lastMessage?.author?.name}</span> ); } function renderSocialOperator() { const isMe = lastMessage?.author?._id === authUser._id; const label = getLabel( lastMessage?.author?.type === "operator" ? "me" : lastMessage?.author?.type ); return isLoading || lastMessage?.type !== "text" ? null : ( <span> {label}: {lastMessage?.author?.name} </span> ); } return ( <p> {socialSupervisor && renderSocialSupervisor()} {socialOperator && renderSocialOperator()} </p> );

Sería mejor escribir componentes separados y pasarles los accesorios correctos. Cuanta menos lógica ponga dentro de una declaración de devolución de un solo componente, mejor.

about 4 years ago · Juan Pablo Isaza Report

0

Desestructurar accesorios/variables anidados:

lastMessage para {author, type}

O incluso refactorizar nombres de autor y en lugar de _id y tipo a author_id y author_type, para que pueda desestructurarlos fácilmente:

{{author_id, author_type}, type}

about 4 years ago · Juan Pablo Isaza Report

0

Comenzaré preguntándole cuáles son los tipos de accesorios socialOperator socialSupervisor Puedo adivinar que son valores booleanos (verdadero o falso), así que si uno de ellos es verdadero, ¿significa que el otro accesorio será falso? Si la respuesta es afirmativa, puede usar el operador ternario para representar el componente con una propiedad (puede decidir cuál dejar).

 { socialSupervisor ? <span>Social supervisor render</span> : <span>Social operator render</span> }

En segundo lugar, descubrí que reutiliza sus span s, comparten las mismas clases y solo varían en su contenido. Si me preguntas, crearía una función que devuelva el nombre del autor. Luego, crearía una función que devuelva un lapso con el contenido que necesito.

 const getAuthorLabel = (type, name) => { switch (type) { 'me': return 'Moi: '; 'supervisor': return `superviseur: ${name}`; 'operator': return `conseiller: ${name}`; default: return ''; } } const getAuthLabel = ({ author, type }) => { const isMe = author?._id === authUser?._id; const labelType = isMe && type === 'text' ? 'me' : author?.type; const label = getAuthorLabel(labelType, author?.name); return <span className="text-xs font-semibold mr-1">{label}</span>; }

Y por último, pero no menos importante, ¿necesitas estos accesorios? Quiero decir, el último mensaje seguiría siendo el último mensaje, con todos sus accesorios, incluido el tipo de mensaje, el tipo de autor, el nombre del autor, la identificación del autor, etc. Entonces, tal vez podría representar la etiqueta directamente en el elemento de párrafo, sin el hay que comprobar sus valores. Por supuesto, esto es irrelevante si necesita estos accesorios para otra cosa, o significan algo más por sí mismos.

Todo un refactor para el componente, como me imagino sería algo parecido a esto:

 const YourComponent = ({ lastMessage }) => { // your other logic goes here return <p>{renderAuthLabel(lastMessage)}</p>; }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!