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, }; }) class GeographicView extends PureComponent { componentDidMount = () => { const { dispatch } = this.props; dispatch({ type: 'geographic/fetchProvince', }); }; componentDidUpdate(props) { const { dispatch, value } = this.props; if (!props.value && !!value && !!value.province) { dispatch({ type: 'geographic/fetchCity', payload: value.province.key, }); } } getProvinceOption() { const { province } = this.props; return this.getOption(province); } getCityOption = () => { const { city } = this.props; return this.getOption(city); }; getOption = list => { if (!list || list.length < 1) { return ( ); } return list.map(item => ( )); }; selectProvinceItem = item => { const { dispatch, onChange } = this.props; dispatch({ type: 'geographic/fetchCity', payload: item.key, }); onChange({ province: item, city: nullSlectItem, }); }; selectCityItem = item => { const { value, onChange } = this.props; onChange({ province: 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(); const { isLoading } = this.props; return ( ); } } export default GeographicView;