2015-01-20 6 views
0

반응이 간단한 게임을 제작 중입니다. 나는 this example이보기 레이어만으로 반응을 사용하고, 모든 게임 로직을 자신의 외부 객체로 사용한다고 가정합니다. 그 맞습니까?외부 객체의 타이머에서 반응 구성 요소를 업데이트하십시오.

이 예에서 게임은 사용자가 화면을 클릭하면 업데이트됩니다. 따라서 항상 게임에 대한 업데이트를 트리거하는 반응 요소 자체와 상호 작용합니다. 내 예제에서, 게임은 또한 타이머에 기반하여 업데이트 될 수 있습니다 (나는 반응 객체가 아닌 게임 객체 자체 내에서 살아야한다고 생각합니다).

내 질문은, 내 게임 개체 내에서 외부 타이머가 작동 할 때마다 반응 구성 요소를 어떻게 업데이트해야합니까?

아래 코드는 보드 게임을 업데이트하기 위해 해당 함수를 호출 할 수있는 자식 구성 요소에 this.onBoardUpdate.bind(this)을 전달하여 게임에 연결된 상태의 보드 게임을 처리하는 방법을 보여줍니다.

var ContainerView = React.createClass({ 
    getInitialState: function() { 
     return {'board': this.props.board}; 
    }, 
    onBoardUpdate: function() { 
     this.setState({"board": this.props.board}); 
    }, 
    render: function() { 
     return (
      <div> 
       <AlertView board={this.state.board} /> 
       <PassView board={this.state.board} /> 
       <BoardView board={this.state.board} 
        onPlay={this.onBoardUpdate.bind(this)} /> 
      </div> 
     ) 
    } 
}); 

var board = new Board(19); 

React.renderComponent(
    <ContainerView board={board} />, 
    document.getElementById('main') 
); 

그래서, 내 '갱신 타이머'문제에 대한, 내가 생각할 수있는 솔루션은 다음과 같습니다

는) 게임 객체에 살고 타이머를 가지고 있고, 단지 각 전체 구성 요소를 다시 렌더링 tick

b) 게임 개체를 게임 개체에 저장하십시오. 게임이 반응 요소 자체를 업데이트 할 수 있도록 어떤 시점에서 반응 요소의 함수를 다시 게임 객체로 전달합니다 (위 예제와 같이 약간 this.onBoardUpdate.bind(this) 전달).

c) 반응 구성 요소에 타이머가 있고 타이머가 게임 개체의 tick 함수를 호출 한 다음 자신의 상태를 업데이트합니다. 즉, 게임 객체 자체가 tick 인 방법을 알지만,을 tick으로했을 때 을 알 수 없음을 의미합니다.

이 중 아무 것도 나에게 매우 깔끔하게 보이지 않습니다. 어느 것이 가장 좋습니까? 아니면 더 좋은 방법이 있습니까? this.setState({"board": this.props.board}); :

는 마지막으로, 위의 예에서, 어떻게 든 onBoardUpdate 방법은 단순히 구성 요소 소품의 내 board의 값으로 구성 요소의 상태에서 board를 설정하는 것을 재미 보인다. 이것은 정상적인 패턴입니까?

그것은 게임 오브젝트에 살고 타이머를 가지고 아마 최고

답변

2

(경우에 당신이 짐작하지 않았다, 나는! 반응하는 새로운 브랜드를 해요), 그것은 "전체 구성 요소를 다시 렌더링이 각 틱마다. " React의 가장 큰 장점은 무엇을 렌더링 할지를 말해주는 것이며, 그 시점까지 도달하기 위해 DOM에 필요한 최소한의 변경 사항을 결정한다는 것입니다. 따라서 재 렌더링은 매우 빠릅니다. React 구성 요소는 특정 this.state 및 this.props 뷰를 렌더링하는 방법과 관련되어 있어야하며 변경시 업데이트 방법은 고려해야합니다.

그런데 여기의 구성 요소 중 하나만 타이머 (PassView, 말)에 영향을받는다면 ContainerView 구성 요소가 아닌 타이머 상태를 "소유"할 수 있습니다.

관련 문제