Next.js: `dangerouslySetInnerHTML`을 μ‚¬μš©ν•  λ•Œ μ„œλ²„κ°€ μ œλŒ€λ‘œ λ Œλ”λ§λ˜μ§€ μ•ŠμŒ

에 λ§Œλ“  2016λ…„ 11μ›” 05일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: vercel/next.js

λ°°κ²½

μ €λŠ” Prismic.io λ₯Ό CMS둜 μ‚¬μš©ν•˜κ³  있으며 getInitialProps() μ—μ„œ 이 데이터λ₯Ό κ°€μ Έμ˜€κ³  μžˆμŠ΅λ‹ˆλ‹€. μ½˜ν…μΈ λŠ” HTML둜 미리 ν˜•μ‹μ΄ μ§€μ •λ˜μ–΄ μžˆμœΌλ―€λ‘œ dangerouslySetInnerHTML μžˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμƒλ˜λŠ” λ™μž‘

render() 의 좜λ ₯은 μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 싀행될 λ•Œ λ™μΌν•©λ‹ˆλ‹€.

μ‹€μ œ 행동

μ„œλ²„μ—μ„œ render() 의 좜λ ₯이 잘λͺ»λ˜μ—ˆμœΌλ©° ν΄λΌμ΄μ–ΈνŠΈμ™€ μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ„œλ²„μ—μ„œ λ Œλ”λ§:

image

ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λ Œλ”λ§

image

차이점은 DOM λ…Έλ“œκ°€ μ œλŒ€λ‘œ μ€‘μ²©λ˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— μ½˜ν…μΈ κ°€ μ„œλ²„μ—μ„œ μ μ ˆν•œ μŠ€νƒ€μΌμ„ 갖지 μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ„œλ²„μ˜ DOM:

image

ν΄λΌμ΄μ–ΈνŠΈμ˜ DOM:

image

κ΄€λ ¨ μ½”λ“œ

const htmlFor = (type) => ({__html: this.props[type]})
<Article heading="Devotional" html={true} >
   {htmlFor('devotional')}
</Article>

그리고

const Article = ({heading, children, date, link, style, html}) => (
  <article
    className="mv3 mv4-m mv5-l measure"
    style={style}
  >
    <header>
      <h1 className="f3 f2-ns mt0 lh-title i garamond bb bw3 b--gold">
        {heading}
      </h1>
    </header>
    { html
      ? <p className="lh-copy" dangerouslySetInnerHTML={children} />
      : <p className="lh-copy" >{children}</p>
    }

    <footer>
      { date
        ? <p className="f6 i">{date}</p>
        : null
      }
      {link
        ? <a href="#" className='link dim mid-gray bb b--gold'>
            {link}
          </a>
        : null
      }
    </footer>
  </article>
)

더 λ§Žμ€ 정보

이 배포 및 /_src λŠ” μ—¬κΈ°μ—μ„œ κ³΅κ°œλ©λ‹ˆλ‹€: https://thefaithnet-ynikfpghwu.now.sh/

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@flybayer 보고 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.https://validator.w3.org/nu/?doc=https%3A%2F%2Fthefaithnet-ynikfpghwu.now.sh%2F HTML 쀑첩 p νƒœκ·ΈλŠ” μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ™ΈλΆ€ p λŒ€μ‹  divλ₯Ό μ‚¬μš©ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆκΉŒ?

λͺ¨λ“  3 λŒ“κΈ€

@flybayer 보고 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.https://validator.w3.org/nu/?doc=https%3A%2F%2Fthefaithnet-ynikfpghwu.now.sh%2F HTML 쀑첩 p νƒœκ·ΈλŠ” μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ™ΈλΆ€ p λŒ€μ‹  divλ₯Ό μ‚¬μš©ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆκΉŒ?

@impronuncible 와,

잘 μž‘μ•˜μŠ΅λ‹ˆλ‹€. λ„μ™€μ£Όμ…”μ„œ 정말 κ°μ‚¬ν•©λ‹ˆλ‹€!

닀행이닀!

2016λ…„ 11μ›” 6일 μΌμš”μΌ μ˜€μ „ 11:57 Brandon Bayer [email protected]
썼닀:

@impronunciable https://github.com/imronunciable μ™€μš°, κ·Έλž¬κ΅°μš” !

잘 μž‘μ•˜μŠ΅λ‹ˆλ‹€. λ„μ™€μ£Όμ…”μ„œ 정말 κ°μ‚¬ν•©λ‹ˆλ‹€!

β€”
당신이 μ–ΈκΈ‰λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 이것을 λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.

이 이메일에 직접 λ‹΅μž₯ν•˜κ³  GitHubμ—μ„œ ν™•μΈν•˜μ„Έμš”.
https://github.com/zeit/next.js/issues/213#issuecomment -258693902 λ˜λŠ” μŒμ†Œκ±°
μŠ€λ ˆλ“œ
https://github.com/notifications/unsubscribe-auth/AAKHp5EvRuw2GOjOViKL0MjKr0Vrt65sks5q7gbtgaJpZM4KqaPT
.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰