import React, { PureComponent } from 'react'; import { Select, Spin } from 'antd'; import { connect } from 'dva'; import styles from './GeographicView.less'; const { Option } = Select; const nullSlectItem = { label: '', key: '', }; @connect(({ geographic }) => { const { province, isLoading, city } = geographic; return { province, city, isLoading, }; }) export default class GeographicView extends PureComponent { componentDidMount = () => { this.props.dispatch({ type: 'geographic/fetchProvince', }); }; componentDidUpdate(props) { if (!props.value && !!this.props.value && !!this.props.value.province) { this.props.dispatch({ type: 'geographic/fetchCity', payload: this.props.value.province.key, }); } } getProvinceOption() { return this.getOption(this.props.province); } getCityOption = () => { return this.getOption(this.props.city); }; getOption = (list) => { if (!list || list.length < 1) { return ( ); } return list.map((item) => { return ( ); }); }; selectProvinceItem = (item) => { this.props.dispatch({ type: 'geographic/fetchCity', payload: item.key, }); this.props.onChange({ province: item, city: nullSlectItem, }); }; selectCityItem = (item) => { this.props.onChange({ province: this.props.value.province, city: item, }); }; conversionObject() { const { value } = this.props; if (!value) { return { province: nullSlectItem, city: nullSlectItem, }; } const { province, city } = value; return { province: province || nullSlectItem, city: city || nullSlectItem, }; } render() { const { province, city } = this.conversionObject(); return ( ); } }