Я пытаюсь сделать блок кода не таким повторяемым и более пригодным для повторного использования, но я не могу его закрепить.У меня был большой блок кода, который, очевидно, делает то же самое, просто отправляет другое импортированное мной редукционное действие:
const handleSend = async (values) => {
if (props.onSubmit) {
props.onSubmit(values);
}
if (source === 'First Source') {
const { error } = await props.dispatch(
shareFirstSource(payload, values.email, values.message, values.encrypt, values.phone)
);
if (error) {
Alert.alert('Email did not send.', 'Sorry for the inconvenience.', [
{ text: 'Try Again?', onPress: () => handleSend(values) },
{ text: 'Cancel' }
]);
} else {
Alert.alert('Email Sent', 'Your email was successfully sent.', [
{ text: 'OK', onPress: () => props.navigation.dismiss() }
]);
}
}
if (source === 'Second Source') {
const { error } = await props.dispatch(
shareSecondSource(payload, values.email, values.message, values.encrypt, values.phone)
);
if (error) {
Alert.alert('Email did not send.', 'Sorry for the inconvenience.', [
{ text: 'Try Again?', onPress: () => handleSend(values) },
{ text: 'Cancel' }
]);
} else {
Alert.alert('Email Sent', 'Your email was successfully sent.', [
{ text: 'OK', onPress: () => props.navigation.dismiss() }
]);
}
}
};
Мне удалось разбить его на этот блок кода, но я продолжаю сталкиваться с проблемами.Текущая проблема, с которой я сталкиваюсь, заключается в том, что параметр transAction возвращается неопределенным.
const transmitActions = {
FirsSource: shareFirstSource,
SecondSource: shareSecondSource,
};
const handleSend = async (values) => {
if (props.onSubmit) {
props.onSubmit(values);
}
const transmitAction = transmitActions[source];
console.log('TRANSMIT_ACTION>>>', transmitAction);
if (!transmitAction) {
return;
}
const { error } = await props.dispatch(transmitAction(payload, values.email, values.message, values.encrypt, values.phone));
if (error) {
Alert.alert('Email did not send.', 'Sorry for the inconvenience.', [
{ text: 'Try Again?', onPress: () => handleSend(values) },
{ text: 'Cancel' }
]);
} else {
Alert.alert('Email Sent', 'Your email was successfully sent.', [
{ text: 'OK', onPress: () => props.navigation.dismiss() }
]);
}
}
Я думаю, что отчасти это мой опыт работы с TypseScript, потому что у меня ранее была проблема с TS, но я смог ее решить.Второй набор глаз будет оценен.