我有一个使用Material Ui的代码库,其中包含一些主题覆盖。我正在设置我的SettingsContext和SettingsProvider,遇到了我不太理解的语法。
采取以下措施:
const initialState: SettingsContextProps = {
...defaultSettings,
onToggleMode: () => {},
onChangeMode: () => {},
onToggleContrast: () => {},
onChangeContrast: () => {},
onChangeColor: () => {},
};
SettingsContextProps
类型设置如下:
export type SettingsContextProps = {
onToggleMode: VoidFunction;
onChangeMode: (event: React.ChangeEvent<HTMLInputElement>) => void;
onToggleContrast: VoidFunction;
onChangeContrast: (event: React.ChangeEvent<HTMLInputElement>) => void;
onChangeColor: (event: React.ChangeEvent<HTMLInputElement>) => void;
};
当我设置我的提供者时,我试图理解语法,但我遇到了困难。为什么我要使用这个铸件event.target as HTMLInputElement).value as ThemeMode
export function SettingsProvider({ children, defaultSettings }: SettingsProviderProps) {
const [settings, setSettings] = useState(defaultSettings);
const onToggleMode = () => {
setSettings({
...settings,
themeMode: settings.themeMode === 'light' ? 'dark' : 'light',
});
};
const onChangeMode = (event: ChangeEvent<HTMLInputElement>) => {
setSettings({
...settings,
themeMode: (event.target as HTMLInputElement).value as ThemeMode,
});
};
const onToggleContrast = () => {
setSettings({
...settings,
themeContrast: settings.themeContrast === 'default' ? 'bold' : 'default',
});
};
const onChangeContrast = (event: ChangeEvent<HTMLInputElement>) => {
setSettings({
...settings,
themeContrast: (event.target as HTMLInputElement).value as ThemeContrast,
});
};
const onChangeColor = (event: ChangeEvent<HTMLInputElement>) => {
setSettings({
...settings,
themeColorPresets: (event.target as HTMLInputElement).value as ThemeColorPresets,
})
最后是他们铸造的类型
export type ThemeMode = 'light' | 'dark';
export type ThemeContrast = 'default' | 'bold';
export type ThemeColorPresets = 'default' | 'purple' | 'cyan' | 'blue' | 'orange' | 'red';
themeColorPresets: (event.target as HTMLInputElement).value as ThemeColorPresets
线路在做什么?
尝试将event.target
更改为event.currentTarget
,因为target
并不总是具有侦听器的元素