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

231
Views
El componente React se renderiza dos veces

Tengo texto de mi Prismic CMS, donde quiero aplicar 'palabras dinámicas'. Las palabras dinámicas son palabras del CMS, que tienen una imagen vinculada, por lo que si un texto contiene una palabra dinámica, lo cambia a un intervalo con atributos de datos, por lo que aparece un subrayado debajo de cada palabra dinámica, y si hace clic en él , aparece la imagen de la derecha.

En mi código, obtengo el HTML interno del bloque de texto, con el procesamiento prismático y todas las etiquetas dentro de él, y luego quiero cambiar el HTML interno, para aplicar las palabras dinámicas al texto y luego cambiar el HTML interno del texto. bloque al html con las palabras dinámicas.

Pero tengo algunos problemas, mi componente React se procesa dos veces, por lo que cuando se procesa por primera vez y registro newText en la consola, es el correcto. Pero en la segunda representación, también cambia los atributos de datos de la extensión dinámica de palabras, por lo que todo el html se está arruinando.

¿Alguien sabe por qué se ejecuta dos veces, o tal vez tiene una mejor solución para solucionar mi problema?

 export const ArticleBodyText = ({ text, dynamic_words }) => { useEffect(() => { const textblocks = document.querySelectorAll('#textblock p'); textblocks.forEach(item => { const textblock = item.innerHTML; const newText = setDynamicWords(textblock, dynamic_words); console.log(newText); item.innerHTML = newText; }); }, [dynamic_words]); return ( <TextBlock id="textblock"> <RichText render={text} /> </TextBlock> ); };
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

busque un gancho llamado useeffect una vez

https://www.robinwieruch.de/react-useeffect-only-once/

about 4 years ago · Juan Pablo Isaza Report

0

Simplemente haga un estado que regrese si es verdadero, así que después del segundo renderizado, no pasará nada.

 export const ArticleBodyText = ({ text, dynamic_words }) => { const [hasUpdated, setHasUpdated] = useState(false); useEffect(() => { if (hasUpdated) return; setHasUpdated(true); const textblocks = document.querySelectorAll('#textblock p'); textblocks.forEach(item => { const textblock = item.innerHTML; const newText = setDynamicWords(textblock, dynamic_words); console.log(newText); item.innerHTML = newText; }); }, [dynamic_words]); return ( <TextBlock id="textblock"> <RichText render={text} /> </TextBlock> ); };
about 4 years ago · Juan Pablo Isaza Report

0

Eliminar React.StrictMode del código ReactDOM.render

 ReactDOM.render( <React.StrictMode> <App /> </React.StrictMode>, document.getElementById('root') );
 ReactDOM.render( <> <App /> </>, document.getElementById('root') );
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!