Я получаю аргумент ошибки строки типа или undefined не может быть назначен параметру строки типа с помощью машинописного текста и реагировать

Ниже мой код,

    function List({items}: Props) { 
        const [activeindex, setActiveindex] = React.useState<string>();
        return (
            items.map((item: any) => {
                <AddButton setActiveIndex={setActiveIndex} itemId={item.id}/>
            }
        );
    }

    
    interface AddButtonProps {
        setActiveIndex: any;
        itemId?: string;
    }
    function AddButton ({setActiveIndex, itemId}: AddButtonProps){
        const {toggleDrawing} = useDrawing();
        const handleClick = (itemId) => {
            setActiveIndex(itemId);
            toggleDrawing(itemId); //error here
        }
        return (
            <Button onClick={handleClick}/>
        );
    );


    function useDrawing () {
        const [editableItemId, setEditableItemId] = React.useState<string>();
        const toggleDrawing = React.useCallback(async (itemId: string) => {
            if (isDrawing && editableItemId === itemId) {
                cancelDrawing();
            } else if (isDrawing) {
                cancelDrawing();
                setEditableItemId(itemId);
            } else {
                setEditableWorkAreaId(itemId);
            }
        },
            [isDrawingPolygon, editableItemId, cancelDrawing]
    );
}

Я не уверен, почему получаю эту ошибку. может кто-нибудь помочь мне исправить это. Спасибо.

0
saritha 21 Авг 2020 в 04:56

2 ответа

Лучший ответ

Ваш интерфейс определяет itemId?: string; и строку или undefined, но для вызова функции нужна строка.

Используйте либо

if (itemId) {
  toggleDrawing(itemId);
}

Или

toggleDrawing(itemId || '');

Или

toggleDrawing(itemId as string);

0
Adrian Brand 21 Авг 2020 в 02:07

Попробуй так;)

const toggleDrawing = React.useCallback(async (itemId: string | undefined) => {
    if (isDrawing && editableItemId === itemId) {
        cancelDrawing();
    } else if (isDrawing) {
        cancelDrawing();
        setEditableItemId(itemId);
    } else {
        setEditableWorkAreaId(itemId);
    }
   },[])
1
Liu Lei 21 Авг 2020 в 02:40