2015-10-21 20 views
5

Prawdopodobnie robię coś głupiego, ale nie mogę dostać defaultProps do pracy.React defaultProps nie działa

export default class MyClass extends Component{ 
    static propTypes = { 
    name: React.PropTypes.string.isRequired, 
    field: React.PropTypes.object.isRequired 
    } 

    static defaultProps = { 
    field: { value: '', errors: [] } 
    } 

    render() { 
    // blah blah 
    } 
} 

Mam kod, który opiera się na this.props.field.value i this.props.field.errors.length i wszystkich moich testów są wysadzenie z TypeError: 'undefined' is not an object (evaluating 'this.props.field.errors.length') nie powinny domyślną rekwizyty nadać mu wartość domyślną? Początkowo moja propozycja field jest pustym obiektem.

Odpowiedz

9

Początkowo moja propozycja field jest pustym obiektem.

Domyślne rekwizyty są używane tylko wtedy, gdy dla podpory nie jest podawana żadna wartość. Jest to płytkie połączenie, a nie głęboka fuzja.

Z docs kopalni (nacisk):

Wynik getDefaultProps() będą buforowane i wykorzystywane w celu zapewnienia, że ​​this.props.value będzie mieć wartość jeśli nie została określona przez komponent nadrzędnej.

+0

Powinienem mieć nieco dokładniej RTFM, będę musiał przemyśleć moje podejście. – Lee

+1

to jest kluczowy punkt "Domyślne rekwizyty są używane tylko wtedy, gdy dla rekwizytów nie jest przekazywana żadna wartość, to jest płytkie połączenie, a nie głęboka fuzja." – Wayou

+0

Wygląda na to, że odnośnik do linku jest nieaktualny. Zapoznaj się z tą stroną. https://reactjs.org/docs/react-without-es6.html#declaring-default-props –

Powiązane problemy