Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΊΠ°ΠΊ:
onChange?: (value: OptionType | OptionType[], action: ActionMeta) => void;
ΠΠΎΠ³Π΄Π° ΠΎΠΏΡΠΈΡ Π²ΡΠ±ΡΠ°Π½Π°, ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠΏΡΠΈΠΈ, Π° Π½Π΅ ValueType
ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π― Π½Π°ΡΠ΅Π» ΡΡΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΌ.
value
Π² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ΅ - ΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ² Π²ΡΠ±ΡΠ°Π½Π½ΡΡ
ΠΎΠΏΡΠΈΠΉ (ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ isMuli
prop).
_onTagChange(
value: ReactSelectTypes.ValueType<{value: number; label: string}>,
action: ReactSelectTypes.ActionMeta
) {
console.log('l68:', value, ' action:', action);
switch(action.action) {
case 'pop-value':
case 'remove-value':
}
if (value && value.length > 0) {
e let firstOption = value[0]; // Errors here with: Element implicitly has an 'any' type because type '{ value: number; label: string; } | { value: number; label: string; }[]' has no index signature.
}
// this.setState({ categoryTags: tags });
}
ΠΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° onChange
Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΡΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ OptionType
, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ΄Π½ΠΎ-, ΠΌΠ½ΠΎΠ³ΠΎΠ·Π½Π°ΡΠ½ΡΠΌ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ OptionType
.
Π‘ΠΌ. Https://github.com/JedWatson/react-select/issues/2902 Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° onChange Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ TypeScript.
@rvanlaarhoven - ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ OP, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΉ ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ². IMO ΠΌΠ°ΡΡΠΈΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π²ΡΠ±ΡΠ°Π½ Π»ΠΈ select isMulti
. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΈ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ. ΠΠΎ Π΄Π° Π»Π°Π΄Π½ΠΎ ...
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ @JoshMcCullough
ΠΡΠ»ΠΎ Π±Ρ ΠΏΡΠΎΡΠ΅, Π΅ΡΠ»ΠΈ Π±Ρ Π½Π°ΠΌ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΈΠΌΠ΅ΡΡ Π΄Π΅Π»ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½ΡΡ
, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ.
ΠΡΠ»ΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΉ Π²ΡΠ±ΠΎΡ, ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π±Π΅ΡΠ΅ΠΌ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΈΠ½Π°ΡΠ΅ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ - Π½ΠΈΠΊΠ°ΠΊΠΈΡ
Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ. Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ΠΏΡΠΎΡΡΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ°ΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ.
ΠΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΌΠ΅Π½Ρ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°Π΅Ρ ΡΠΎ, ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ isMulti
. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΈΠΏΠΎΠ² ΡΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π½Π°ΡΡ ΡΠΈΠΏ onChange
.
ΠΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ? (ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: Π½Π΅ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠ΅ ΠΈΠ΄Π΅ΠΈ)
interface BaseProps<OptionType extends OptionTypeBase = { label: string; value: string }> extends SelectComponentsProps {
... /* all existing fields except isMulti and onChange */
}
interface SingleValueProps<...> extends BaseProps<...> {
isMulti: false;
onChange: (value: OptionType | null | undefined, action: ActionMeta) => void;
}
interface MultiValueProps<...> extends BaseProps<...> {
isMulti: true;
onChange: (value: OptionsType<OptionType> | null | undefined, action: ActionMeta) => void;
}
/* where the props are defined */
selectProps: SingleValueProps<...> | MultiValueProps<...>
ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ
interface Props<IsMulti extends boolean, OptionType extends OptionTypeBase = { label: string; value: string }> extends SelectComponentsProps {
...
isMulti: IsMulti,
onChange: (value: ValueType<IsMulti, OptionType>, action: ActionMeta) => void;
...
}
export type ValueType<IsMulti extends boolean, OptionType extends OptionTypeBase> =
(IsMulti extends false ? OptionType : OptionsType<OptionType>) | null | undefined;
Π ΠΠΠΠΠ’ΠΠ ΠΠΠΠ’Π¬: ΠΏΠΎΠ΄ΡΠΌΠ°Π² ΠΎΠ± ΡΡΠΎΠΌ Π΅ΡΠ΅ ΡΠ°Π·, ΡΠΈΠΏ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ΅ΡΠ΅ isMulti
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, <Select isMulti={false} />
Π½ΠΎ Π½Π΅, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ, ΠΊΠ°ΠΊ <Select isMulti={getValue()} />
, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠ° ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°?
ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ isArray ΡΠΆΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΠΏ Π½Π΅ OptionType | OptionType[]
ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΎΠΏΠΈΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ²Π΅ΡΡΠΈ Π΅Π³ΠΎ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°:
props.onChange((v as YourOptionTypeHere).value);
ΠΠΎΡΡΡΠΏΠ΅Π½ Π»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (Typescript) Π΄Π»Ρ ΠΌΡΠ»ΡΡΠΈ-Π·Π½Π°ΡΠ΅Π½ΠΈΡ undefined, Array<Option>, Option
?
@hoetmaaiers ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΡΠ°ΡΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠΎΠΌ:
type Nullable<T> = T | null | undefined;
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ» ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ:
interface iOption { label: string; value: string; };
Π Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π» ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ:
onChange={(option) => myMethod((option as iOption).value) }
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ as
ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅Ρ Π²ΡΡ ΡΠ΅Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΠΈΠ½ΠΎΠΏΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°. ΠΡΠΎ Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΡΠ³ΠΎΠ΄Ρ ΠΎΡ
option: ValueType<{value :string, label: string}>
Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ as
? Π’Π΅ΠΊΡΡΠΈΠΉ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ (Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ) ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.
Π£ ΠΌΠ΅Π½Ρ Π²ΡΠ΅ Π΅ΡΠ΅ Π΅ΡΡΡ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ onChange (ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²ΡΠ±ΠΎΡ) ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΌΡ ΡΠΈΠΏΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ....
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ item => (item as OptionTypeBase) .value. ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ»ΠΎΡ ΠΎ.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°?
ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ isArray ΡΠΆΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΠΏ Π½Π΅
OptionType | OptionType[]
ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΎΠΏΠΈΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ²Π΅ΡΡΠΈ Π΅Π³ΠΎ.