Создание многоразовой функции для двух редуксовых действий - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь сделать блок кода не таким повторяемым и более пригодным для повторного использования, но я не могу его закрепить.У меня был большой блок кода, который, очевидно, делает то же самое, просто отправляет другое импортированное мной редукционное действие:

  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, но я смог ее решить.Второй набор глаз будет оценен.

1 Ответ

0 голосов
/ 26 сентября 2019

Может быть, мне не хватает некоторого контекста, но я не совсем понимаю идею, лежащую в основе кода.Можете ли вы поделиться минимальным-воспроизводимым примером ?

Из того, что я вижу во втором блоке кода, переменная 'source' не выглядит определенной.Может быть, поэтому 'transAction' не определено.

...