реагировать на префикс кода страны для ввода текста - PullRequest
0 голосов
/ 06 августа 2020

Попытка создать форму, которая принимает адрес и номер телефона клиента, но API принимает только номер телефона с прикрепленным кодом страны. Поэтому мне нужно добавить его через код.

Я пробовал это с помощью приведенного ниже кода, но похоже, что он всегда оставляет последний номер без указания последнего числа.

export default function ShippingAddressForm(props: Props) {
  let { address, onChangeAddress } = props;
  let [phoneState, setPhoneState] = useState<string>('');

  <TextInput
    label={t('Phone Number')}
    textContentType="telephoneNumber"
    value={phoneState}
    onChangeText={(number) => {
      setPhoneState(number)
      let phone = '+61' + phoneState
      onChangeAddress({ ...address, phone })
    }}
  />
}

Создание приложение на Expo с исходным машинописным кодом реакции

1 Ответ

1 голос
/ 06 августа 2020

Установить состояние асинхронно, поэтому не сразу, потребуется некоторое время, чтобы изменить состояние компонента. В вашем коде setPhoneState не является функцией ожидания, поэтому значение телефона обновляется раньше, чем телефон.

  1. решение

используйте номер вместо phoneState

onChangeText={(number) => {
   setPhoneState(number)
   let phone = '+61' + number
   onChangeAddress({ ...address, phone })
}}

решение использовать useEffect

     doSomething();
     let phone = '+61' + phoneState;
     onChangeAddress({ ...address, phone });
    }, [phoneState])

решение

использовать добавление временной задержки в коде (неправильный подход)

 onChangeText={(number) => {
       setPhoneState(number)
       setTimeout( ()=>null, 3000);
       let phone = '+61' + number
       onChangeAddress({ ...address, phone })
    }}
...