reactjs - Hur sätter man en rensa-knapp inuti kalenderfönstret i antd datepicker-komponenten?


Jag använder andt datepicker-komponent. I mitt fall täcker rensningsikonen kalenderknappen.

Jag behöver ta bort rensa-knappen och tillåta manuell rensning. (Men, såvitt jag vet, kan det för närvarande inte göras). Eller jag behöver flytta rensa-knappen inuti kalendermodalen, till exempel bredvid Idag-knappen. Är det möjligt?

Jag försökte sätta värdet false på allowClear-egenskapen. Det tar bort rensningsknappen. Men datumväljaren kan inte rensas manuellt.

Svar #1

Du kan använda renderExtraFooter för att anpassa sidfoten. Just nu finns det inget alternativ för att lägga till mer innehåll med Today-knappen. Men du kan dölja den nuvarande Today-knappen och rendera din egen anpassade sidfot. Jag renderade en Today- och Clear-knapp i datepicker-sidfoten och satte showNow till false för att dölja den befintliga knappen. Du kan också kolla på Extra Footer-exemplet.

Här är den kompletta koden

import { Button, DatePicker, Flex } from 'antd';
import dayjs, { type Dayjs } from 'dayjs';
import { useRef, useState } from 'react';

const App = () => {
    const [value, setValue] = useState<Dayjs | null>(null);
    const [open, setOpen] = useState(false);
    const ref = useRef(null);

    return (
        <div style={{ display: 'flex', columnGap: '1rem' }}>
            <DatePicker
                ref={ref}
                open={open}
                onOpenChange={setOpen}
                value={value}
                onChange={setValue}
                allowClear={false}
                showNow={false}
                renderExtraFooter={() => (
                    <Flex justify='space-between' style={{ paddingBlock: 7 }}>
                        <Button
                            size='small'
                            type='link'
                            onClick={() => {
                                setValue(dayjs());
                                // Value is not updated if we close the picker immediately
                                setTimeout(() => setOpen(false));
                            }}
                        >
                            Today
                        </Button>
                        <Button size='small' danger onClick={() => setValue(null)}>
                            Clear
                        </Button>
                    </Flex>
                )}
            />
        </div>
    );
};

export default App;

Svar #2

du kan titta igenom dokumentationen här för mer information: https://ant.design/components/date-picker#common-api

Här är ett exempel:

    const [date, setDate] = useState(null);
        const handleChange = (dateValue: any) => {
            setDate(dateValue);
        }
    
        return (
            <>
                <DatePicker
                    onChange={handleChange}
                    allowClear={true}
                    value={date}
                    // clearIcon={
                    //     // you can use every element here
                    // }
                />
            </>
        );

Du kan kolla hur det ser ut som standard: Exempel