Диалоговое окно не закрывается - PullRequest
1 голос
/ 28 января 2020

Я работаю над отображением выпадающего списка в диалоговом окне, используя act-native-modals . После выбора элемента из раскрывающегося списка диалоговое окно автоматически закрывается и отображает данные выбранного элемента на экране, но некоторые элементы в раскрывающемся списке не имеют соответствующих данных. Для этих элементов я применяю условие для выбора другого элемента в списке, но после применения условия в программе диалоговое окно не закрывается, оно остается на экране с данными выбранного элемента в фоновом режиме.

Вот мой код

 constructor(props) {
    super(props);
    this.state = {
      visible: true
    }
  }

_onCityChange = city => {
    const { uid, date } = this.props;
    this.setState({
        visible: false
      });
      this.props.citiesShow({ uid, city, date })
  }

render() {
  console.log(this.props);
    let dropdownData = () => {
      let cities = this.props.cities;
      let count = Object.keys(cities).length;
      let cityList = [];
      for (let i = 0; i < count; i++) {
        cityList.push({ value: cities[i].city });
      }
      return cityList;
    }
    const dropdownCity = dropdownData();

if ((this.props.cityName.length > 0) && (this.props.cityData == '')) //THIS IS CONDITION
    {
      return (
        <View style={{ alignItems: "center", justifyContent: 'center' }}>
        <Text>No data for this location yet.</Text>
        <TouchableHighlight>
          <Text style={{ fontSize: 20 }}>Select another city.</Text>
        </TouchableHighlight>
      </View>
      );
    }
    else{
      return (
        <View>

          <View>
            <Dialog
              visible={this.state.visible}
              dialogAnimation={new SlideAnimation({ slideFrom: 'bottom' })}
              dialogStyle={{ opacity: 0.9 }}>
              <DialogContent>
                <View>
                  <Dropdown
                    label='Select your city..'
                    labelFontSize={14}
                    selectedItemColor={'black'}
                    baseColor={'black'}
                    style={{ fontSize: 22, fontWeight: 'bold' }}
                    containerStyle={{ width: 300, height: 83 }}
                    data={dropdownCity}
                    onChangeText={this._onCityChange} />
                </View>
              </DialogContent>
            </Dialog>
          </View>


          <FlatList
            data={this.props.prayer}
            keyExtractor={(item, index) => index.toString()}
            renderItem={this.renderItem} />

        </View>
      );
  }
  }

const mapStateToProps = state => {
  return {
    mainData: state.city.main,
    uid: state.city.uid,
    date: state.city.date,
    cities: state.city.cities,
    cityName: state.city.cityName
    //loading: state.city.loading
  };
};

//Make the component available to other parts of app
export default connect(mapStateToProps, { citiesShow, city, citiesToggle, getCity })(CityData);

CityReducer. js file

import { MAIN_DATA, UPDATE_HOME, DATE, CITY_DATA, CITY_NAME} from '../actions/types';
import moment from 'moment';

const INITIAL_STATE = {
    main: '',date: moment('01/01/2019', 'DD/MM/YYYY').format('DD MMMM YYYY'), cities: '', city: '',
    loading: false,
    selectedItem: ''
};
export default (state = INITIAL_STATE, action) => {
    console.log(action);
    switch (action.type) {
        case UPDATE_HOME:
            return { ...state, uid: action.payload };
        case CITY_DATA:
            return { ...state, cities: action.payload  };
        case CITY_NAME:
            return { ...state, city: action.payload };
        case MAIN_DATA:
            return { ...state, main: action.payload };
        default:
            return state;

    }
};

...