React: Singleton React ꡬ성 μš”μ†Œ

에 λ§Œλ“  2015λ…„ 11μ›” 27일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: facebook/react

μ–˜λ“€ μ•„!
이 μ‘μš© ν”„λ‘œκ·Έλž¨μ—λŠ” "도움말 μ„Ήμ…˜"μ΄λΌλŠ” ꡬ성 μš”μ†Œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 기본적으둜 μ‚¬μš©μžκ°€ μ—‰λ§μœΌλ‘œ λ§Œλ“œλŠ” ꡬ성 μš”μ†Œμ— λŒ€ν•œ 미리 μ •μ˜ 된 ν…μŠ€νŠΈλ₯Ό ν‘œμ‹œν•˜λŠ” μƒμžμž…λ‹ˆλ‹€.

도움말을 ν‘œμ‹œ ν•  ꡬ성 μš”μ†Œλ₯Ό "도움말 μ„Ήμ…˜"ꡬ성 μš”μ†Œμ— μ•Œλ¦¬κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ§€κΈˆμ€ λͺ‡ 가지 μ•‘μ…˜κ³Ό μŠ€ν† μ–΄μ™€ ν•¨κ»˜ Fluxλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이것은 λ‚˜μ˜μ§€ μ•Šκ³  κ½€ 잘 μž‘λ™ν•˜μ§€λ§Œ,이 원인을 μœ„ν•΄ νŠΉλ³„νžˆ μ •μ˜ 된 2 개의 νŒŒμΌμ΄μžˆλŠ” μƒλ‹Ήνžˆ 큰 μ„€μ •μž…λ‹ˆλ‹€. λ˜ν•œ λ‹€λ₯Έ μž‘μ—…μœΌλ‘œ 인해 "도움말 μ„Ήμ…˜"μž‘μ—…μ΄ λ””μŠ€νŒ¨μΉ˜ν•˜λŠ” λ“± μ—¬λŸ¬ 가지 λ‹€λ₯Έ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€ ( "파견 쀑에 λ””μŠ€νŒ¨μΉ˜ ν•  수 μ—†μŒ"였λ₯˜κ°€ λ°œμƒ 함).

κ·ΈλŸ¬λ‚˜ "help section"을 singleton 으둜 μ •μ˜ ν•  수 μžˆλ‹€λ©΄ "help section"의 μΈμŠ€ν„΄μŠ€ λ₯Ό 얻을 수 μžˆμœΌλ―€λ‘œ import helpSection from './HelpSection μ‚¬μš©ν•˜λ©΄λ©λ‹ˆλ‹€. λ‚΄κ°€ν•΄μ•Ό ν•  일은 λ‚΄κ°€ λ³€κ²½ν•˜κ³  싢은 속성을 μ„€μ •ν•˜λŠ” λ©”μ„œλ“œλ₯Ό helpSection 에 λ…ΈμΆœν•˜κ³  ν˜ΈμΆœν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

ꡬ성 μš”μ†Œκ°€ λ‹€λ₯Έ ꡬ성 μš”μ†Œλ₯Ό λ³€κ²½ν•˜μ—¬ React의 단방ν–₯ 데이터 흐름을 κΉ¨λœ¨λ¦¬λŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ λ•Œλ‘œλŠ” κ·Έλ§Œν•œ κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ œκ°€ μƒκ°ν•˜λŠ” 방식은 μΌμ’…μ˜ 상점, 일뢀 μž‘μ—… 및 ꡬ성 μš”μ†Œλ₯Ό ν•˜λ‚˜μ˜ 개체둜 κ²°ν•©ν•œ κ²ƒμž…λ‹ˆλ‹€. λ§Žμ€ ꡬ성 μš”μ†Œκ°€ λŸ°νƒ€μž„μ— ν•œ 번만 μΈμŠ€ν„΄μŠ€ν™”λ˜λ―€λ‘œ κ²½μš°μ— 따라 맀우 유용 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이 JSfiddle μ΄μ™Έμ˜ μ›Ήμ—μ„œ 이것에 λŒ€ν•œ μ°Έμ‘°λ₯Ό 찾을 수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

μ €λŠ” JavaScript와 React의 μ΄ˆλ³΄μžμ΄λ―€λ‘œ λͺ‡ 가지 λͺ…λ°±ν•œ μš”μ μ„ λ†“μΉ˜κ³ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
이것에 λŒ€ν•΄ μ–΄λ–»κ²Œ μƒκ°ν•˜μ‹­λ‹ˆκΉŒ?
읽어 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

(PS λͺ¨ν˜Έν•œ 점에 λŒ€ν•΄ μ£„μ†‘ν•©λ‹ˆλ‹€. μ˜μ–΄λŠ” 제 λͺ¨κ΅­μ–΄κ°€ μ•„λ‹™λ‹ˆλ‹€ ... : smile :)

Question

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

μ•ˆλ…•ν•˜μ„Έμš” @all ,

λ‹€λ₯Έ 관점을 μΆ”κ°€ν•˜μ—¬μ΄ λŒ€ν™”λ₯Ό 되 살리고 μ‹ΆμŠ΅λ‹ˆλ‹€. Wir react @ 16 포털 을 μ‚¬μš©ν•˜μ—¬ DOM의 νŠΉμ • 지점에 μ»΄ν¬λ„ŒνŠΈλ₯Ό 마운트 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ‚¬μš© μ‚¬λ‘€μ—μ„œλŠ” 이와 같이 App.jsx λ§ˆμš΄νŠΈλ˜λŠ” νŠΉμ • λ‹€λ₯Έ ꡬ성 μš”μ†Œλ‘œ λ Œλ”λ§λ˜μ–΄μ•Όν•˜λŠ” λͺ¨λ‹¬ λ˜λŠ” μ•Œλ¦Όκ³Ό 같은 λ‹€λ₯Έ ꡬ성 μš”μ†Œλ₯Ό λΉŒλ“œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

App.jsx

[...]
render() {
  return (<SingletonOverlay></SingletonOverlay>)
}
[...]

Notification.jsx

import React from 'react';
import ReactDOM from 'react-dom';
import NotificationComponent from './Notification.js';
import SingletonOverlay from '../general/Overlay.js';

export default class Notification extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      element: null
    };
  }

  componentDidMount() {
    this.setState({ element: ReactDOM.findDOMNode(SingletonOverlay) });
  }

  render() {
    return this.state.element
      ? ReactDOM.createPortal(
        <NotificationComponent>That is a notification</NotificationComponent>,
        this.state.element,
      )
      : null;
  }
}

λ‹€λ₯Έ μ˜΅μ…˜μ€ document.findElementById λ˜λŠ” μœ μ‚¬ν•œ κΈ°λŠ₯μ΄μžˆλŠ” domNodeλ₯Ό μ°Ύμ•„μ„œ ReactDOM.findDOMNode 에 μ „λ‹¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 그러면 "React-Cosmos"λ₯Ό κ°•μ œλ‘œ μ’…λ£Œν•΄μ•Όν•˜λ―€λ‘œ 기뢄이 맀우 쒋지 μ•ŠμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ μœ„μ—μ„œ μ–ΈκΈ‰ ν•œ κΈ°λŠ₯에 λŒ€ν•΄ μΈμŠ€ν„΄μŠ€ 자체λ₯Ό μ „λ‹¬ν•˜λŠ” λŒ€μ‹  ν•¨μˆ˜μ— μ „λ‹¬ν•˜λŠ” νŠΉμ • ꡬ성 μš”μ†Œμ˜ μΈμŠ€ν„΄μŠ€λ₯Ό 검색 ν•  수 있기λ₯Ό λ°”λžλ‹ˆλ‹€. 이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법에 λŒ€ν•œ λ‹€λ₯Έ μ ‘κ·Ό 방식에도 관심이 μžˆμŠ΅λ‹ˆλ‹€.

@jimfb 이 κΈ°λŠ₯ μ œμ•ˆμ˜ κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆκΉŒ?

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

이것은 React μ½”μ–΄μ˜ 버그 λΌκΈ°λ³΄λ‹€λŠ” μ‚¬μš©λ²• 질문처럼 λ³΄μž…λ‹ˆλ‹€. StackOverflow와 같은 μ‚¬μ΄νŠΈμ—μ„œλŠ” React μ½”μ–΄μ—μ„œ 버그λ₯Ό μΆ”μ ν•˜κΈ° μœ„ν•΄ github 문제λ₯Ό μ‚¬μš©ν•˜λ €κ³ ν•˜λ―€λ‘œ μ‚¬μš© μ§ˆλ¬Έμ— λŒ€ν•œ 닡변이 더 μ’‹μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 이유둜이 문제λ₯Ό ν•΄κ²°ν•˜λ €κ³ ν•˜μ§€λ§Œ μ—¬κΈ°μ—μ„œ λŒ€ν™”λ₯Ό κ³„μ†ν•˜κ±°λ‚˜ StackOverflow둜 μ΄λ™ν•˜μ‹­μ‹œμ˜€.

κ·€ν•˜μ˜ 질문과 κ΄€λ ¨ν•˜μ—¬ μ €μ˜ 개인적인 ꢌμž₯ 사항은 μ‹±κΈ€ 톀을 ν”Όν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons

λ‹΅μž₯을 보내 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.
λ‚΄κ°€ μ•Œμ§€ λͺ»ν•˜λŠ” μ‹±κΈ€ ν†€μœΌλ‘œ React μ»΄ν¬λ„ŒνŠΈλ₯Ό μƒμ„±ν•˜λŠ” 방법이 이미 μžˆμŠ΅λ‹ˆκΉŒ? (λ‚˜λŠ” μ„ λ°° 쀑 ν•œ λͺ…이 평가할 λ•ŒκΉŒμ§€ JSfiddle을 μ‹ λ’°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). μžˆλŠ” 경우 λ¬Έμ„œμ—μ„œ 찾을 수 μ—†μœΌλ―€λ‘œ λ‚˜μ™€ κ³΅μœ ν•˜μ‹­μ‹œμ˜€.

"ꡬ성 μš”μ†Œ κ°„ 톡신"λ¬Έμ„œ νŽ˜μ΄μ§€μ—μ„œ :

λΆ€λͺ¨-μžμ‹ κ΄€κ³„κ°€μ—†λŠ” 두 ꡬ성 μš”μ†Œ κ°„μ˜ 톡신을 μœ„ν•΄ 자체 κΈ€λ‘œλ²Œ 이벀트 μ‹œμŠ€ν…œμ„ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
...
ν”ŒλŸ­μŠ€ νŒ¨ν„΄μ€ 이것을 λ°°μ—΄ν•˜λŠ” κ°€λŠ₯ν•œ 방법 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

λ³΄μ‹œλ‹€μ‹œν”Ό μ‹±κΈ€ 톀은 μ–ΈκΈ‰λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 당신이 μ€€ StackOverflow λ§ν¬μ—μ„œ λ§Žμ€ μ‚¬λžŒλ“€μ΄ μ‹€μ œλ‘œ μ‹±κΈ€ 톀을 μ‚¬μš©ν•˜λŠ” 것이 μ–΄λ–€ κ²½μš°μ— μœ μš©ν•˜λ‹€κ³  λ§ν–ˆμŠ΅λ‹ˆλ‹€. 두 번째 λ‹΅λ³€μ—μ„œ :

μ‹±κΈ€ 톀은 ν•˜λ‚˜μ˜ 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.
μžμ› κ²½ν•©.
μžμ›μ΄ μžˆλ‹€λ©΄
(1) 단일 μΈμŠ€ν„΄μŠ€ 만 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
(2) 단일 μΈμŠ€ν„΄μŠ€λ₯Ό κ΄€λ¦¬ν•΄μ•Όν•©λ‹ˆλ‹€.
μ‹±κΈ€ 톀이 ν•„μš”ν•©λ‹ˆλ‹€.

이것은 λ‚΄ 유슀 μΌ€μ΄μŠ€μ²˜λŸΌ λ“€λ¦½λ‹ˆλ‹€ (그리고 React μ„Έκ³„μ—μ„œλŠ” κ½€ 많이).

ꡬ성 μš”μ†Œλ₯Ό μ‚¬μš©ν•˜λŠ” κ΄€λ ¨ λ°©λ²•μ²˜λŸΌ λ³΄μ΄λ―€λ‘œ GitHub의 문제둜 μ—¬μ „νžˆ 관련이 μžˆλ‹€κ³  μƒκ°ν•˜λ©° λ¬Έμ„œμ— 이에 λŒ€ν•œ μ°Έμ‘°κ°€ ν¬ν•¨λ˜μ–΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

React ꡬ성 μš”μ†Œ μΈμŠ€ν„΄μŠ€μ—λŠ” ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€κ°€ 트리 λ‚΄λΆ€μ—μžˆλŠ” μœ„μΉ˜λ₯Ό νŒŒμ•…ν•˜λŠ” 데 ν•„μš”ν•œ λ‚΄λΆ€ μƒνƒœκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ™μΌν•œ μΈμŠ€ν„΄μŠ€λ₯Ό μ—¬λŸ¬ μœ„μΉ˜μ—μ„œ λ Œλ”λ§ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ‹±κΈ€ 톀 μΈμŠ€ν„΄μŠ€μ˜ κ°œλ…μ€ React μ„Έκ³„μ—μ„œ μ˜λ―Έκ°€ μ—†μŠ΅λ‹ˆλ‹€.

κ·Έ λ°”μ΄μ˜¬λ¦°μ— ν‘œμ‹œλœ 것은 μ‹€μ œλ‘œ 단일 μΈμŠ€ν„΄μŠ€ 인수둜 인해 μ‹±κΈ€ 톀이라고 λΆ€λ₯΄λŠ” 것이 μ•„λ‹™λ‹ˆλ‹€. 자체 μƒνƒœλ₯Ό 가진 λͺ¨λ“ˆκ³Ό λΉ„μŠ·ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ μΈμŠ€ν„΄μŠ€κ°€ λ Œλ”λ§ 될 λ•Œ 포함 된 (κ·ΈλŸ¬λ‚˜ μ‹€μ œλ‘œλŠ” "μ „μ—­") μƒνƒœλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. κΈ€λ‘œλ²Œ μƒνƒœμ—μ„œ 마운트 된 μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό 속이고 μ €μž₯ν•˜κ³  마운트 된 μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ μ—…λ°μ΄νŠΈλ₯Ό κ°•μ œν•©λ‹ˆλ‹€. 이제 μ‹€μ œλ‘œ 더 λ§Žμ€ 것을 λ Œλ”λ§ν•˜λŠ” 것을 막을 μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. 이둜 인해 첫 번째 ν•­λͺ©μ΄ μ—…λ°μ΄νŠΈλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μœ μ‚¬ν•œ μž‘μ—…μ„ μ‰½κ²Œ μˆ˜ν–‰ν•˜κ³  1 개 μ΄μƒμ˜ λ Œλ”λ§μ„ 지원할 수 μžˆμŠ΅λ‹ˆλ‹€.

우리 λ¬Έμ„œμ—μ„œ 이것을 μ°Έμ‘°ν•˜λŠ” 것에 κ΄€ν•΄μ„œλŠ” κ·Έλ ‡κ²Œν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. React둜 달성 ν•  μˆ˜μžˆλŠ” λ§Žμ€ νŒ¨ν„΄μ΄ μžˆμ§€λ§Œ λͺ¨λ‘μ— λŒ€ν•΄ μ΄μ•ΌκΈ°ν•˜μ§€λŠ” μ•Šκ² μŠ΅λ‹ˆλ‹€.

μ‹œκ°„μ„λ‚΄μ–΄ λ‹΅μž₯ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€, James.
첫째, κ·€ν•˜μ˜ μš”μ μ„ μ™„μ „νžˆ μ΄ν•΄ν•˜κ³  JSfiddle을 μ‚΄νŽ΄λ³Έ 사싀에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ 말씀 λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

  1. λ‚΄κ°€ "μ‹±κΈ€ 톀"μ΄λž€ μ˜λ―ΈλŠ” μ•± μ „μ²΄μ—μ„œ ν•œ 번만 λ Œλ”λ§λ˜λŠ” React ꡬ성 μš”μ†Œμ˜ μΈμŠ€ν„΄μŠ€μž…λ‹ˆλ‹€. 그것이 λ‚˜μ˜ μΆœλ°œμ μ΄μ—ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 1 개 이상 λ Œλ”λ§ν•˜λŠ” 경우 μ—…λ°μ΄νŠΈλ˜μ§€ μ•ŠλŠ” 첫 번째 λ¬Έμ œμ— λŒ€ν•΄ μ–ΈκΈ‰ ν•œ λ¬Έμ œλŠ” 그닀지 μ μ ˆν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  2. λ‚˜λŠ” κΈ€λ‘œλ²Œ λ„€μž„ 슀페이슀λ₯Ό "μ˜€μ—Όμ‹œν‚€λŠ”"것이 λˆˆμ‚΄μ„ μ°Œν‘Έλ¦¬κ³  μžˆλ‹€λŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ, μ–΄λ–€ μ½”λ”© 접근법과 λ§ˆμ°¬κ°€μ§€λ‘œ 그것은 μž₯μ†Œμ™€ μš©λ„κ°€ μžˆμŠ΅λ‹ˆλ‹€. 이런 μ’…λ₯˜μ˜ 일에 Fluxλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 μ—¬λŸ¬ 가지 이유둜 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€ (쒋은 ν•˜λ£¨ λ™μ•ˆ 어렀움을 κ²ͺμ—ˆμŠ΅λ‹ˆλ‹€). 그리고 μ§€κΈˆλ„ μ œκ°€ 생각 ν•΄λ‚Έ μ†”λ£¨μ…˜μ€ 그닀지 쒋지 μ•ŠμŠ΅λ‹ˆλ‹€ (μ»΄ν¬λ„ŒνŠΈκ°€ μ†Œν’ˆ λ˜λŠ” μ €μž₯). λ‚΄κ°€ μ„€λͺ…ν•œ λ°©μ‹μœΌλ‘œ μ‹±κΈ€ 톀을 μ‚¬μš©ν•˜λ©΄ 이것을 훨씬 μ‰½κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. μž₯점이 단점보닀 크닀고 μƒκ°ν•©λ‹ˆλ‹€.
  3. λ¬Έμ„œμ™€ κ΄€λ ¨ν•˜μ—¬ μ•Œλ‹€μ‹œν”Ό. μ €λŠ” μ•½ 2 κ°œμ›” λ™μ•ˆ Reactλ₯Ό μ‚¬μš©ν•΄ μ™”μœΌλ©° μ–΄λ–€ μ‹œμ μ—μ„œ λ¬Έμ„œκ°€ μ‹¬κ°ν•˜κ²Œ λΆ€μ‘±ν•œ 것은 비밀이 μ•„λ‹™λ‹ˆλ‹€. μ €μ—κ²Œ React μ‚¬μš©λ²•μ„ λ°°μš°λŠ” 것은 μ–΄λ ΅κ³  ν˜Όλž€ μŠ€λŸ¬μ› μŠ΅λ‹ˆλ‹€.
    λ¬Έμ„œμ—λŠ” ν˜„μž¬ "κ°€μ‘±"κ΄€κ³„κ°€μ—†λŠ” ꡬ성 μš”μ†Œ κ°„μ˜ 톡신에 λŒ€ν•œ 3 개의 λ¬Έμž₯이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 이런 μ’…λ₯˜μ˜ 일에 μ‚¬μš© κ°€λŠ₯ν•œ λ‹€μ–‘ν•œ νŒ¨ν„΄μ΄ λ‹Ήμ‹ μ—κ²Œ λͺ…λ°±ν•˜λ‹€λŠ” 것을 μ΄ν•΄ν•˜μ§€λ§Œ μ§€κΈˆκΉŒμ§€ Fluxλ₯Ό λ§Œλ‚¬μŠ΅λ‹ˆλ‹€.
    μ΄ˆλ³΄μžλŠ” λ¬Έμ„œμ— 크게 μ˜μ‘΄ν•˜λ©°, λͺ¨λ“  μ’…λ₯˜μ˜ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 데 μ‚¬μš©ν•  μˆ˜μžˆλŠ” κ°€λŠ₯ν•œ νŒ¨ν„΄μ„ λ‚˜μ—΄ν•˜λŠ” 것이 μ •ν™•ν•œ μž‘μ—… 일 수 μžˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” 슀슀둜 νŒ¨ν„΄μ„ μ‹¬λ„μžˆκ²Œ 배울 수 있으며, μ–΄λ–€ 도ꡬ가 μž‘μ—…μ— μ ν•©ν•œ 지 λ°°μš°λŠ” 것이 μ–΄λ €μš΄ λΆ€λΆ„μž…λ‹ˆλ‹€.

λ‚˜μ—κ²Œ νž˜λ“€μ—ˆλ˜ 일을 더 μ‰½κ²Œ λ§Œλ“€κ³  μ‹Άλ‹€. λͺ‡ μ€„μ˜ λ¬Έμ œκ°€ 될 것이며 μ•žμœΌλ‘œ μ΄ˆλ³΄μžμ—κ²Œ 도움이 될 것이라고 μƒκ°ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 항상 μ—„μ²­λ‚œ λŒ“κΈ€μ„ μ“°κ²Œλ˜λŠ”λ° .. ν•¨κ»˜ 읽어 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. :λ―Έμ†Œ:

μ•ˆλ…•ν•˜μ„Έμš” @all ,

λ‹€λ₯Έ 관점을 μΆ”κ°€ν•˜μ—¬μ΄ λŒ€ν™”λ₯Ό 되 살리고 μ‹ΆμŠ΅λ‹ˆλ‹€. Wir react @ 16 포털 을 μ‚¬μš©ν•˜μ—¬ DOM의 νŠΉμ • 지점에 μ»΄ν¬λ„ŒνŠΈλ₯Ό 마운트 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ‚¬μš© μ‚¬λ‘€μ—μ„œλŠ” 이와 같이 App.jsx λ§ˆμš΄νŠΈλ˜λŠ” νŠΉμ • λ‹€λ₯Έ ꡬ성 μš”μ†Œλ‘œ λ Œλ”λ§λ˜μ–΄μ•Όν•˜λŠ” λͺ¨λ‹¬ λ˜λŠ” μ•Œλ¦Όκ³Ό 같은 λ‹€λ₯Έ ꡬ성 μš”μ†Œλ₯Ό λΉŒλ“œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

App.jsx

[...]
render() {
  return (<SingletonOverlay></SingletonOverlay>)
}
[...]

Notification.jsx

import React from 'react';
import ReactDOM from 'react-dom';
import NotificationComponent from './Notification.js';
import SingletonOverlay from '../general/Overlay.js';

export default class Notification extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      element: null
    };
  }

  componentDidMount() {
    this.setState({ element: ReactDOM.findDOMNode(SingletonOverlay) });
  }

  render() {
    return this.state.element
      ? ReactDOM.createPortal(
        <NotificationComponent>That is a notification</NotificationComponent>,
        this.state.element,
      )
      : null;
  }
}

λ‹€λ₯Έ μ˜΅μ…˜μ€ document.findElementById λ˜λŠ” μœ μ‚¬ν•œ κΈ°λŠ₯μ΄μžˆλŠ” domNodeλ₯Ό μ°Ύμ•„μ„œ ReactDOM.findDOMNode 에 μ „λ‹¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 그러면 "React-Cosmos"λ₯Ό κ°•μ œλ‘œ μ’…λ£Œν•΄μ•Όν•˜λ―€λ‘œ 기뢄이 맀우 쒋지 μ•ŠμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ μœ„μ—μ„œ μ–ΈκΈ‰ ν•œ κΈ°λŠ₯에 λŒ€ν•΄ μΈμŠ€ν„΄μŠ€ 자체λ₯Ό μ „λ‹¬ν•˜λŠ” λŒ€μ‹  ν•¨μˆ˜μ— μ „λ‹¬ν•˜λŠ” νŠΉμ • ꡬ성 μš”μ†Œμ˜ μΈμŠ€ν„΄μŠ€λ₯Ό 검색 ν•  수 있기λ₯Ό λ°”λžλ‹ˆλ‹€. 이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법에 λŒ€ν•œ λ‹€λ₯Έ μ ‘κ·Ό 방식에도 관심이 μžˆμŠ΅λ‹ˆλ‹€.

@jimfb 이 κΈ°λŠ₯ μ œμ•ˆμ˜ κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆκΉŒ?

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