2017-06-29 12 views
5

Niedawno zaczął używać reagować i staram się określić wartości domyślne tak:defaultProps vs logiczną OR

class TextInput extends Component { 
    render() { 
     return (
      <input 
       type="text" 
       name={ this.props.inputName || 'inputName' } 
       style={ this.props.inputStyle || {} } 
       className={ this.props.inputClass || '' } 
      /> 
     ); 
    } 
} 

zamiast:

class TextInput extends Component { 
    render() { 
     return (
      <input 
       type="text" 
       name={ this.props.inputName} 
       style={ this.props.inputStyle} 
       className={ this.props.inputClass} 
      /> 
     ); 
    } 
} 

TextInput.defaultProps = { 
    inputName: 'inputName', 
    inputStyle: {}, 
    inputClass: '' 
} 

Jakie wady ma takie podejście mają w przeciwieństwie do korzystania defaultProps ?

Odpowiedz

6

Jakie wady ma to podejście w przeciwieństwie do korzystania z defaultProps?

W swoim szczególnym przykładzie kodu; żaden, ponieważ używasz tylko jednego wniosku tylko raz. Jednak wyobraź sobie większe aplikacje, w których konkretny rekwizyt jest używany w wielu miejscach, byłoby bardzo uciążliwe, aby ręcznie zdefiniować "wartość rezerwową", jeśli wartość jest fałszywa.

Wyobraź sobie także, jeśli nagle zmienisz tę wartość na inną; musiałbyś wtedy przejść przez cały komponent i zaktualizować go wszędzie tam, gdzie ten konkretny rekwizyt jest używany. To by skłoniło go do błędów i pomyłek.

Innym problemem z podejściem jest, jeśli rzeczywiście zrobić chcą szczególny rekwizyt być falsy, takich jak null lub 0. Wtedy twój warunek zawodzi, a zamiast tego zostanie użyta "wartość rezerwowa".


Więc w zasadzie, używając defaultProps sprawia zarządzania rekwizyty nieco łatwiejsze i bardziej wszechstronne i łatwe do zarządzania.

Nawiasem mówiąc, używane wyrażenie logiczne nazywa się Short-circuit evaluation.

+0

Rozumiem, dziękuję za odpowiedź – sleepwalker00

2

Oba podejścia działają poprawnie. A co, jeśli musisz używać rekwizytów w wielu miejscach? Kończysz pisanie operacji logicznych w całym kodzie. Domyślne rekwizyty można zdefiniować raz i używać bez żadnych problemów.

Można jednak użyć dowolnej metody. To tylko kwestia stylu kodowania.

Powiązane problemy