У меня есть действие, которое называется так:

export const makePayment = (values) => async (dispatch) => {
  console.log("current payment is ", values);
  res = await axios.post(domain + "/api/makePayment", values);
  console.log("payment done", res);
};

Так я вызываю так из своего компонента react native при нажатии кнопки с помощью props.makePayment:

const Payment = (props) => {
  const [filled, setFilled] = useState(false);
  const [values, setValues] = useState(false);
  return (
    
       {
          form.status.cvc == "valid" &&
          form.status.expiry == "valid" &&
          form.status.number == "valid"
            ? setFilled(true) && setValues(form.values)
            : setFilled(false);
        }}
      />
       {
          filled
            ? console.log("current investment is ", props.currInvestment) &&
              props.makePayment(values) &&
              Alert.alert("Invested")
            : Alert.alert("Incorrect Payment Method");
          // navigation.navigate('OwnScreen', {artistName:props.artistName,
          // mediaName:props.mediaName, uri:props.uri,description:props.description });
        }}
        style={({ pressed }) => [
          {
            backgroundColor: pressed ? "white" : "#03befc",
          },
          styles.own,
        ]}
      >
        Pay
      
    
  );
};

Здесь представлены mapStateToProps и connect:


function mapStateToProps(state) {
  return { currInvestment: state.currInvestment };
}

export default connect(mapStateToProps, { makePayment })(Payment);

Однако я не вижу console.log в действиях после нажатия кнопки. Что я делаю не так и как это исправить?

zendevil

Ответов: 1

Ответы (1)

Проблема заключается в объединении утверждений с использованием &&:

console.log("current investment is ", props.currInvestment) &&
          props.makePayment(values)

Возвращаемое значение console.log() не является истинным (оно неопределено), поэтому ваш вызов makePayment() никогда не будет выполнен из-за использования &&. Используя это, если первое утверждение не является истинным, то дальнейшие утверждения не выполняются.

Удалите, что console.log() и makePayment() будут запущены.

Для проверки этого вы можете выполнить:

console.log('One') && console.log('Two')

Выполнен будет только первый.

2022 WebDevInsider