Home > database >  React Native DateTimePicker: Why is it keep opening after I press the "OK" buton
React Native DateTimePicker: Why is it keep opening after I press the "OK" buton

Time:07-05

I'm trying to create a date picker. When the user press on the "OK" button the modal should have closed but it keeps reopening. I'm using react-native-datetimepicker. I did tried putting setShow(false) when the "OK" button is pressed but it still open for a split second.

const [receiptDate, setReceiptDate] = React.useState("");
const [date, setDate] = React.useState(new Date()); 
const [today, setToday] = React.useState(new Date()); 
const [show, setShow] = React.useState(false); 

const onChange = (event, selectedDate) => {
    const currentDate = selectedDate || date;
    setDate(currentDate);
    if (event.type == "dismissed") {  
        console.log("CANCEL")
        setShow(false) 
        return null;
    } else { 
        setShow(false)
        console.log("OK")
        let tempDate = new Date(currentDate);
        let fDate = tempDate.getFullYear()   "-"   tempDate.getDate()   "-"   (tempDate.getMonth()   1)
        setReceiptDate(fDate);
        console.log(fDate);
        return;
    }
}

                     <View>
                        <TouchableOpacity activeOpacity={0.9} onPress={() => setShow(true)}>
                            <TextInput
                                editable={false} 
                                placeholder="YYYY-MM-DD (2022-05-22)" 
                                value={receiptDate}
                            />
                        </TouchableOpacity>
                        {show && (
                            <DateTimePicker
                                testID='dateTimePicker'
                                value={date}
                                mode={'date'} 
                                display='default'
                                onChange={onChange}
                                maximumDate={today}
                        />)}
                    </View>

CodePudding user response:

In my opinion, you are not setting show to false, in case if the user selects an option. Please try this and let me know if it fixes your problem or not:

const onChange = (event, selectedDate) => {
        if (event.type == 'set') {
            const currentDate = selectedDate || startDate;
            let tempDate = new Date(currentDate);
            let fDate = tempDate.getFullYear()   "-"   tempDate.getDate()   "-"   (tempDate.getMonth()   1)
            setReceiptDate(fDate);
            setDate(currentDate);
        }
        setShow(false) 
    }
  • Related