DEV Community

Cover image for Make line breaks work when you render text in a React or Vue component

Make line breaks work when you render text in a React or Vue component

Cassidy Williams on April 09, 2022

Sometimes you will get a string that you can't control in your React components (like from a CMS or API). It might look something like this: "Wo...
Collapse
 
sereneinserenade profile image
Jeet Mandaliya • Edited

It was a great read, thanks.

A bit of addition: In Vue, one can also do. Codesandbox: codesandbox.io/s/demo-v-html-97ow8e

<p v-html="replaceWithBr(haiku)" />
Enter fullscreen mode Exit fullscreen mode
Collapse
 
cassidoo profile image
Cassidy Williams

Ahhh I was wondering if that was a thing but didn't bother trying, thanks for sharing!

Collapse
 
kissu profile image
Konstantin BIFERT

True. Don't forget to sanitize it if it can come from a user input (to avoid malicious code).

Collapse
 
britt_joiner profile image
Brittany Joiner

Thanks Cassidy! I have an issue to work on that I basically need to do this (swap out one tag for another), but my team wants me to try to avoid using ‘dangerouslySetInnerHTML’. This gives me the idea to see if css can do anything for me, but I worry it might not because it’s not a white space issue (I’m actually trying to swap tags with a specific component we have for highlighting text.) I’ll play around with it some more!

Collapse
 
alifallahrn profile image
Ali Fallah

That's great! Thanks for sharing it with us

Collapse
 
maarlon1 profile image
Maarlon1

Thanks, .css-fix with white-space attribute works with Vue3, thanks (after I have spent the whole afternoon trying to find a solution). v-HTML is not recommended because of the malicious code injection possibility.

Collapse
 
komilovtemur profile image
Temur Komilov

react-dom.development.js:12056 Uncaught TypeError: Cannot read properties of undefined (reading 'replace')
Image description
Image description
Image description

Collapse
 
cassidoo profile image
Cassidy Williams

You're not passing the body variable to your function!

Collapse
 
saiafonua profile image
Saia Fonua

Thanks Cassidy! I appreciate it

Collapse
 
iainsimmons profile image
Iain Simmons

Or you make an array by splitting the strings and then insert the br tags wherever you need.

I'd do it with flatMap:
https://codesandbox.io/s/young-bash-4vevii?from-embed=&file=/src/App.js

Collapse
 
dihnauer profile image
Diogo Hanauer

That's great! Thanks. ❤