2015-01-08 2 views
5

나는 어느 시점에 자식에 속한 상태 변수를 읽어야하는 구성 요소를 가지고있다.
이 상태 변수가 부모 변수로 이동해야하며 콜백을 통해 변경해야합니까? 내가보기,이 중 일부는 가능성이 잘못이기 때문에React : 아이들의 상태에 안티 패턴으로 접근하고 있습니까?

, 이들은 부모에게 이동 상태의 장단점은 다음과 같습니다

프로 :이 단방향 데이터 흐름에 이상을 준수하는 것 반응의 진언.

단점 : 부모의 다른 자녀는 상태 변경시 다시 렌더링됩니다 (실제 DOM에서는 아니지만 성능에 영향을 미칠 수 있음).

가장 좋은 방법은 무엇입니까? 데이터 흐름에 대한

+0

"백업"이 필요한 곳이면 백업을 이동해야합니다. 상위 컴포넌트가 필요로하는 경우에도 하위 컴포넌트에서도 변수가 사용되는 이유는 무엇입니까? –

답변

10

모범 사례는 다음과 같습니다 관련이없는 구성 요소에서 처리기

  • 를 통해 다른 :
  • 아이부터 부모
  • 소품을 통해 :

    부모로부터 아이에게
    • 메시지 버스를 통해

    예 :

    <Child onEvent={this.handleEvent}> 
    

    부모는 있습니다 Petka가 언급 한 바와 같이, 상태가 정상에 살아야

    handleEvent: function(dataFromChild) { 
    
    } 
    
  • +0

    다시 작성해야 할 필요가 없다는 것을 안다면, 부모 변수에 데이터를 저장하는 것이 좋지만 클래스 변수에 데이터를 저장하는 것이 좋습니까? –

    +1

    @eye_mew : 나는 그렇다고 말하고 싶습니다. 인스턴스에 간격과 같은 것을 저장하는 것은 괜찮지 만,'render'가 의존하는 것은'state'에 들어가야합니다. 그렇지 않으면 React는 변경된 것을 알아낼 수 없으며'componentDidUpdate'와 같은 라이프 사이클 메소드도 쓸모가 없습니다. (예를 들어'prevState'에 어떤 데이터도 없으므로). –

    +0

    기타 : [Thinking in React] (http://facebook.github.io/react/blog/2013/11/05/thinking-in-react.html) –

    2

    .
    Thinking in React은 잘 설명합니다.

    부모의 다른 자녀는 상태 변경시 (실제 DOM에서는 아니지만 성능에 영향을 미칠 수 있음) 다시 렌더링됩니다.

    60fps로 설정하지 않으면이 사실을 알 수 없을 것입니다.
    그렇다면 React는 shouldComponentUpdate (및 PureRenderMixin) (선택 사항)으로 처리했습니다.

    관련 문제