2016-08-14 2 views
0

Im обучения React.js и я не уверен на лучший способ сделать следующее:Как реорганизовать эти переменные в React.js

У меня есть следующий класс React (урезанная для простоты)

const X01Game = React.createClass({ 


saveShot(e) { 
    e.preventDefault(); 
    const currentPlayer = this.props.players[this.state.currentPlayer], 
      currentID  = currentPlayer.ID, 
      shot   = this.refs.shot.value; 
     .... shot saved..... 
}, 
isValidShot(shot) { 
    const currentPlayer = this.props.players[this.state.currentPlayer], 
      currentID  = currentPlayer.ID, 
      score   = this.state.score[currentID]; 
    .... shot validated..... 
}, 

render() { 

    return (
     <div className="game-container"> 
      .... render game .... 
     </div> 
    ); 
} 
}); 

export default X01Game; 

Как вы можете видеть в некоторых методах я повторяю:

const currentPlayer = this.props.players[this.state.currentPlayer], 
     currentID  = currentPlayer.ID, 
     shot   = this.refs.shot.value; 

Существует ли способ я могу объявить их во всем мире, так избежать повторений каждого метода? Не смотрите прямо на меня, как этот

ответ

0

Поскольку вы всегда запрашивающий currentPlayerId, просто добавить метод к X01Game class который получит его:

getGurrentPlayerId() { 
    var currentPlayer = this.props.players[this.state.currentPlayer]; 
    return currentPlayer ? currentPlayer.id : null; // in case the player doesn't exist 
} 

То же самое для выстрела:

getShot() { // pun intended 
    return this.refs.shot && this.refs.shot.value; 
} 

Теперь вы можете сделать:

saveShot(e) { 
    e.preventDefault(); 
    const currentID  = this.getGurrentPlayerId(), 
      shot   = this.getShot(); 
     .... shot saved..... 
}, 
isValidShot(shot) { 
    const currentID  = this.getGurrentPlayerId(), 
      score   = this.state.score[currentID]; 
    .... shot validated..... 
}, 
+0

Я не думаю, что это было бы идеально, теперь у него есть добавлены два дополнительных метода без сокращения кода, вы просто абстрагировались, когда данные извлекаются из – David

+0

Абстракции DRY, так как они могут использоваться несколько раз, не повторяя себя. 'GetGurrentPlayerId' также инкапсулирует логику получения' currentPlayerId', поэтому вы можете пропустить поиск 'currentPlayer' до получения его id (2 строки вместо 4). –

+0

Спасибо @OriDrori, это будет моим следующим естественным шагом, мне просто интересно, можем ли мы установить что-то более глобальное, например, когда вы устанавливаете переменные в конструкторе класса PHP – chifliiiii

Смежные вопросы