Używam poniższego kodu, aby ustawić domyślne właściwości komponentu React, ale to nie działa. W render()
metodzie widzę, że wynik „undefined props” został wydrukowany na konsoli przeglądarki. Jak mogę zdefiniować domyślną wartość dla właściwości komponentów?
export default class AddAddressComponent extends Component {
render() {
let {provinceList,cityList} = this.props
if(cityList === undefined || provinceList === undefined){
console.log('undefined props')
}
...
}
AddAddressComponent.contextTypes = {
router: React.PropTypes.object.isRequired
}
AddAddressComponent.defaultProps = {
cityList: [],
provinceList: [],
}
AddAddressComponent.propTypes = {
userInfo: React.PropTypes.object,
cityList: PropTypes.array.isRequired,
provinceList: PropTypes.array.isRequired,
}
reactjs
ecmascript-6
Joey Yi Zhao
źródło
źródło
react
/native
doc i nie mogłem ich znaleźć, gdzie jest na to dokument?static
są zmienne klasowe, ma to sens, więc sugeruję przeczytanie o nich na MDN . Zasadniczo składnia w dokumentacji jest równoważna z tym, ponieważ oba dodają informacje o właściwościach do samej klasy, a nie do poszczególnych instancji.Najpierw musisz oddzielić swoją klasę od dalszych rozszerzeń, np. Nie możesz rozszerzyć
AddAddressComponent.defaultProps
w ramach,class
zamiast tego przenieść ją na zewnątrz.Polecam również przeczytanie o cyklu życia Konstruktora i Reacta: zobacz Specyfikacje komponentów i cykl życia
Oto, czego chcesz:
import PropTypes from 'prop-types'; class AddAddressComponent extends React.Component { render() { let { provinceList, cityList } = this.props; if(cityList === undefined || provinceList === undefined){ console.log('undefined props'); } } } AddAddressComponent.contextTypes = { router: PropTypes.object.isRequired }; AddAddressComponent.defaultProps = { cityList: [], provinceList: [], }; AddAddressComponent.propTypes = { userInfo: PropTypes.object, cityList: PropTypes.array.isRequired, provinceList: PropTypes.array.isRequired, } export default AddAddressComponent;
źródło
constructor
icomponentWillReceiveProps
? Wydaje mi się, że OP właśnie zapomniał o zamykającym nawiasie dla swojej deklaracji klasy.Możesz także użyć zadania Destrukturyzacja.
class AddAddressComponent extends React.Component { render() { const { province="insertDefaultValueHere1", city="insertDefaultValueHere2" } = this.props return ( <div>{province}</div> <div>{city}</div> ) } }
Podoba mi się to podejście, ponieważ nie musisz pisać dużo kodu.
źródło
użyj statycznych defaultProps, takich jak:
export default class AddAddressComponent extends Component { static defaultProps = { provinceList: [], cityList: [] } render() { let {provinceList,cityList} = this.props if(cityList === undefined || provinceList === undefined){ console.log('undefined props') } ... } AddAddressComponent.contextTypes = { router: React.PropTypes.object.isRequired } AddAddressComponent.defaultProps = { cityList: [], provinceList: [], } AddAddressComponent.propTypes = { userInfo: React.PropTypes.object, cityList: PropTypes.array.isRequired, provinceList: PropTypes.array.isRequired, }
Zaczerpnięte z: https://github.com/facebook/react-native/issues/1772
Jeśli chcesz sprawdzić typy, zobacz, jak używać PropTypes w odpowiedziach treyhakansona lub Ilana Hasanova lub przejrzyj wiele odpowiedzi w powyższym linku.
źródło
Możesz ustawić domyślne właściwości, używając nazwy klasy, jak pokazano poniżej.
class Greeting extends React.Component { render() { return ( <h1>Hello, {this.props.name}</h1> ); } } // Specifies the default values for props: Greeting.defaultProps = { name: 'Stranger' };
Możesz skorzystać z zalecanego sposobu Reacta z tego linku, aby uzyskać więcej informacji
źródło
Dla funkcji typu prop możesz użyć następującego kodu:
AddAddressComponent.defaultProps = { callBackHandler: () => {} }; AddAddressComponent.propTypes = { callBackHandler: PropTypes.func, };
źródło
Jeśli używasz komponentu funkcjonalnego, możesz zdefiniować wartości domyślne w przydziale destrukturyzacji, na przykład:
export default ({ children, id="menu", side="left", image={menu} }) => { ... };
źródło
class Example extends React.Component { render() { return <h1>{this.props.text}</h1>; } } Example.defaultProps = { text: 'yo' };
źródło