Redux: μ‹¬νŒμ€ μ–΄λ–»μŠ΅λ‹ˆκΉŒ?

에 λ§Œλ“  2015λ…„ 06μ›” 27일  Β·  8μ½”λ©˜νŠΈ  Β·  좜처: reduxjs/redux

ref μ†μ„±μ΄μžˆλŠ” 일뢀 ꡬ성 μš”μ†Œ 주변에 <Connector> μ‚¬μš©ν•˜λ©΄ 더 이상 this.refs λ₯Ό 톡해 μ•‘μ„ΈμŠ€ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 그것을 고치기 μœ„ν•΄ μ•½κ°„ λ¦¬νŒ©ν† λ§ν–ˆμŠ΅λ‹ˆλ‹€. 이것은 λ˜‘λ˜‘ν•œ ꡬ성 μš”μ†Œμ™€ λ©μ²­ν•œ ꡬ성 μš”μ†Œμ˜ ν—›λœ 일이라고 μƒκ°ν•©λ‹ˆλ‹€. μ•„λ‹ˆλ©΄ κ°„λ‹¨ν•œ 것을 λ†“μΉ˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

help wanted question

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

λ―Έμ•ˆν•˜μ§€λ§Œ 그런 μ‚¬μ†Œν•œ κ²½μš°μ— 'findDOMNode'λ₯Ό μ‚¬μš©ν•˜λ„λ‘ μž₯λ €ν•˜λŠ” 것이 μ–΄λ–»κ²Œ ν•΄κ²°μ±…μœΌλ‘œ κ°„μ£Ό 될 수 μžˆλŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 이것은 μ•ˆν‹° νŒ¨ν„΄μž…λ‹ˆλ‹€! λͺ¨λ“  μš”μ†Œμ— μ•‘μ„ΈμŠ€ν•˜κ³  λ…Έλ“œμ˜ 계측 ꡬ쑰λ₯Ό μ •ν™•νžˆ μ•Œμ•„μ•Όν•˜λŠ” jquery μ‹œλŒ€λ‘œ λŒμ•„κ°‘λ‹ˆλ‹€. κ·€ν•˜μ˜ λ¬Έμ„œλŠ” μ •λ‹Ήν•˜κ²Œ μ½μ—ˆμŠ΅λ‹ˆλ‹€.

'findDOMNode ()λŠ” μ΄μŠ€μΌ€μ΄ν”„ ν•΄μΉ˜μž…λ‹ˆλ‹€ ...이 μ΄μŠ€μΌ€μ΄ν”„ ν•΄μΉ˜μ˜ μ‚¬μš©μ€ ꡬ성 μš”μ†Œ 좔상화λ₯Ό 뚫기 λ•Œλ¬Έμ— ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.'

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

슀마트 λŒ€ λ©μ²­ν•œ ꡬ성 μš”μ†Œ

κ·Έλ ‡λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. Connector κ°€μžˆλŠ” _smart_ ꡬ성 μš”μ†ŒλŠ” _dumb_ ꡬ성 μš”μ†Œλ₯Ό λ Œλ”λ§ν•˜κ³  ν•„μš”ν•œ props λ₯Ό μ „λ‹¬ν•΄μ•Όν•©λ‹ˆλ‹€.

@cymen 당신은 이것을 μœ„ν•΄ ref μ½œλ°±μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ :)

const decorator = (Base) => {
  return class {
    render() {
      return <Base {...this.props} />
    }
  }
}

<strong i="7">@decorator</strong>
class Test {

  render () {
    return <div ref={this.props.refCallback}>my div</div>;
  }

}


class Wrapper {

  componentWillMount() {
    this.nestedRef = null;
  }

  componentDidMount() {
    console.log(React.findDOMNode(this.nestedRef));
  }

  setNestedRef = (ref) => {
    this.nestedRef = ref;
  }

  render() {
    return <Test refCallback={this.setNestedRef} />
  }
}

μœ„μ˜ λ‚΄μš©μ€ divλ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€. 도움이 λ κΉŒμš”?

이것은 λ°μ½”λ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ Connector 내뢀에 쀑첩 된 ꡬ성 μš”μ†Œμ— μ½œλ°±μ„ μ „λ‹¬ν•˜λ©΄ μ•„λ§ˆλ„ 잘 μž‘λ™ ν•  κ²ƒμž…λ‹ˆλ‹€. 콜백 λ‚΄μ—μ„œ ꡬ성 μš”μ†Œμ— μ°Έμ‘°λ₯Ό λ‹€μ‹œ ν• λ‹Ή ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

쀑첩 된 μ°Έμ‘°κ°€ μ •λ§λ‘œ ν•„μš”ν•©λ‹ˆκΉŒ?

DOM λ…Έλ“œμ— μ•‘μ„ΈμŠ€ν•˜λ €λŠ” 경우 μ™ΈλΆ€ ꡬ성 μš”μ†Œμ—μ„œ findDOMNode λ₯Ό μˆ˜ν–‰ν•˜λ©΄ μ œλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€. (λ™μΌν•œ λ…Έλ“œλ₯Ό 가리 ν‚΅λ‹ˆλ‹€.)

λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ €λ©΄ λŒ€μ‹  props λ₯Ό 선언적 μΈν„°νŽ˜μ΄μŠ€λ‘œ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 이에 λŒ€ν•œ λ…Όμ˜λŠ” https://github.com/jsstyles/react-jss/issues/15 λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

λ§ˆμ§€λ§‰μœΌλ‘œ, _certain_이라면 refκ°€ ν•„μš”ν•©λ‹ˆλ‹€. 예, https://github.com/gaearon/redux/issues/183#issuecomment -115988937에 μ œμ•ˆ 된 @johanneslumpe 와 같은 쀑첩 된 μ°Έμ‘°λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹«μŠ΅λ‹ˆλ‹€. λͺ…ν™•ν•˜μ§€ μ•Šμ€ 점이 있으면 μ•Œλ €μ£Όμ„Έμš”.

λ―Έμ•ˆν•˜μ§€λ§Œ 그런 μ‚¬μ†Œν•œ κ²½μš°μ— 'findDOMNode'λ₯Ό μ‚¬μš©ν•˜λ„λ‘ μž₯λ €ν•˜λŠ” 것이 μ–΄λ–»κ²Œ ν•΄κ²°μ±…μœΌλ‘œ κ°„μ£Ό 될 수 μžˆλŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 이것은 μ•ˆν‹° νŒ¨ν„΄μž…λ‹ˆλ‹€! λͺ¨λ“  μš”μ†Œμ— μ•‘μ„ΈμŠ€ν•˜κ³  λ…Έλ“œμ˜ 계측 ꡬ쑰λ₯Ό μ •ν™•νžˆ μ•Œμ•„μ•Όν•˜λŠ” jquery μ‹œλŒ€λ‘œ λŒμ•„κ°‘λ‹ˆλ‹€. κ·€ν•˜μ˜ λ¬Έμ„œλŠ” μ •λ‹Ήν•˜κ²Œ μ½μ—ˆμŠ΅λ‹ˆλ‹€.

'findDOMNode ()λŠ” μ΄μŠ€μΌ€μ΄ν”„ ν•΄μΉ˜μž…λ‹ˆλ‹€ ...이 μ΄μŠ€μΌ€μ΄ν”„ ν•΄μΉ˜μ˜ μ‚¬μš©μ€ ꡬ성 μš”μ†Œ 좔상화λ₯Ό 뚫기 λ•Œλ¬Έμ— ꢌμž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.'

λ―Έμ•ˆν•˜μ§€λ§Œ 그런 μ‚¬μ†Œν•œ κ²½μš°μ— 'findDOMNode'λ₯Ό μ‚¬μš©ν•˜λ„λ‘ μž₯λ €ν•˜λŠ” 것이 μ–΄λ–»κ²Œ ν•΄κ²°μ±…μœΌλ‘œ κ°„μ£Ό 될 수 μžˆλŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 이것은 μ•ˆν‹° νŒ¨ν„΄μž…λ‹ˆλ‹€! λͺ¨λ“  μš”μ†Œμ— μ•‘μ„ΈμŠ€ν•˜κ³  λ…Έλ“œμ˜ 계측 ꡬ쑰λ₯Ό μ •ν™•νžˆ μ•Œμ•„μ•Όν•˜λŠ” jquery μ‹œλŒ€λ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

무슨 말인지 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. λ Œλ”λ§ 된 λ…Έλ“œμ— λŒ€ν•œ μ°Έμ‘°κ°€ ν•„μš”ν•œ 경우 (예 : μ˜€ν”„μ…‹ 및 크기 계산) findDOMNode(this) μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ‹Ήμ‹ μ—κ²Œ "더 깊이 λ“€μ–΄κ°€κ±°λ‚˜"그것을 λ³€ν˜•ν•˜λΌκ³  μ œμ•ˆν•˜λŠ” 것이 μ•„λ‹™λ‹ˆλ‹€.

이것이 λ§Œμ‘±μŠ€λŸ½μ§€ μ•Šλ‹€λ©΄ μœ„μ—μ„œ μ œμ•ˆν•œ κ²ƒμ²˜λŸΌ ref callback propsλ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

React-Nativeμ—λŠ” μ μš©λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— findDOMNode(this) 에 μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆλœλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

@xvalentino findDOMNodeλŠ” ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. API λ¬Έμ„œ μ—μ„œ getWrappedInstance κ΄€λ ¨ λΉ„νŠΈλ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

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