169 похожих чатов

Привет, можете помочь с типами, хочу создать универсальную функцию для

создания компонента иконки, чтобы удобно было использовать в разных местах, со своим набором иконок (спрайтом)
то есть по итогу я хочу вывести тип name в зависимости от переданого iconTypeToIconViewBoxMap, я сделал так но это не правильно получается


//CreateIcon
import * as React from 'react'

type IconProps<TIconName> = {
name: TIconName
width?: number | 'auto'
height?: number | 'auto'
className?: string
}

type CreateIcon<TIconTypeToIconViewBoxMap extends Record<string, string>> = (
iconTypeToIconViewBoxMap: TIconTypeToIconViewBoxMap,
iconSpritePath: string,
) => React.FunctionComponent<IconProps<keyof TIconTypeToIconViewBoxMap>>

export const createIcon: CreateIcon<T> = (
iconTypeToIconViewBoxMap,
iconSpritePath,
): React.FunctionComponent<IconProps<T>> => {
return function Icon({ name, width = 'auto', height = 'auto', className }) {
return (
<svg
className={className}
viewBox={iconTypeToIconViewBoxMap[name]}
aria-hidden
width={width}
height={height}
>
<use href={iconSpritePath} />
</svg>
)
}
}

const ICON_TYPE_TO_ICON_VIEW_BOX = {
icon1: '0 0 17 17',
icon2: '0 0 17 17',

}

// Application code
const CustomIcon = createIcon(ICON_TYPE_TO_ICON_VIEW_BOX, '')

const Test = () => <CustomIcon name="" />

3 ответов

21 просмотр

похоже?

veal- Автор вопроса
Лёша Рубцов
screenshot похоже?

нет, мне нужно именно MAP передать и на его основе вывести имя (на основе ключей этой мапы)

veal- Автор вопроса
Лёша Рубцов
screenshot похоже?

о спаибо, направление хорошее было) type IconProps<TIconName> = { name: TIconName width?: number | 'auto' height?: number | 'auto' className?: string } export const createIcon = < TIconTypeToIconViewBoxMap extends Record<string, string>, >( iconTypeToIconViewBoxMap: TIconTypeToIconViewBoxMap, iconSpritePath: string, ) => { return function Icon({ name, width = 'auto', height = 'auto', className, }: IconProps<keyof TIconTypeToIconViewBoxMap>) { return ( <svg className={className} viewBox={iconTypeToIconViewBoxMap[name]} aria-hidden width={width} height={height} > <use href={iconSpritePath} /> </svg> ) } }

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта