Alert.alert在React Native iOS中不起作用,但是在Android中完美

时间:2020-03-06 07:50:41

标签: android ios react-native

请检查代码,

import { 
  Alert,
} from 'react-native';

 checkForSendingOtp = () => {
    let hash = 'aBcDeGgd';
    Platform.OS === 'android'
     ? RNOtpVerify.getHash()
        .then(text => {
          hash = text + ''.replace('[', '');
          hash = hash + ''.replace(']', '');
        })
        .then(() => {
          this.sendDataForOtp(hash);
        })
        .catch(console.log)
    : this.sendDataForOtp(hash);
  };

sendDataForOtp(hash) {

axios.post(url,{hash:hash}).then(response=>{
  Alert.alert(
    'Login Failed',
    'Multiple Logins Are Found. \n Logout From All Other Devices to Continue.',
    [
      {
        text: 'Proceed ?',
        onPress: () => {}                       
      },
      {
        text: 'No',
        onPress: () => {},
      },
    ],
    {cancelable: false},
   );
  });
}


render() {
   return (
    <Ripple
        style={{
           position: 'absolute',
           top: 0,
           bottom: 0,
           left: 0,
           right: 0,
              }}
        onPress={this.checkForSendingOtp}
    />
)}

此代码段在android上可以正常运行,但在iOS上无法显示。为什么?

Nb:-这是我现在可以共享的大部分代码,已编辑代码,请立即检查,如果您有任何疑问,请告诉我。

4 个答案:

答案 0 :(得分:2)

我不完全知道发生了什么,还有一个模型组件用于显示自定义加载,在删除了模型组件之后,警报开始起作用。

答案 1 :(得分:0)

在下方替换警报代码

Alert.alert(
        'Login Failed',
        'Multiple Logins Are Found. \n Logout From All Other Devices to Continue.',
        [
          {
            text: 'Proceed ?',
            onPress: () => {}
          },
          {
            text: 'No',
            onPress: () => {},
            style: 'cancel'
          }
        ],
        { cancelable: false }
      );

答案 2 :(得分:0)

这可能与以下问题有关:https://github.com/facebook/react-native/issues/10471

出于某些奇怪的原因,在“ setTimeout”函数中调用Alert可以使其正常工作。但这显然不是一种安全的方法来避免此问题。您也可以尝试以下解决方案:https://github.com/facebook/react-native/issues/10471#issuecomment-513641325

<html>
  <body>
    <button onclick="test()" id="myBtn">test</button><br />
    <div id="demo"></div>
    <script>
    var contentArray = ['one', 'two', 'three', 'stop'];   // <- declare the array of values you want here
    function test() {
      let $myBtn = document.getElementById('myBtn');
      
      $myBtn.style.display = 'none';

      for(let i = 0; i < contentArray.length; i++){   // <- using 'let' instead of 'var', so a new variable is created on each iteration
        setTimeout(function() {
          // console.log(i);    // <- if you want to see the values, uncomment this line
          document.getElementById("demo").innerHTML = contentArray[i];

        }, 1000 * (i+1));
      };
      
      $myBtn.style.display = 'block';
    }
    </script>
  </body>
</html>

答案 3 :(得分:0)

    setTimeout(() => {      
        //TODO  use return and setTimeout           
        return Alert.alert(
        i18n.t('notAtYard.alertTitle'),
        'Invalid username or password',
        [
            {
                text: 'Ok',
                onPress: () => {
                    setUserPassword('');
                    setUsername('');
                },
            }
        ],
        {cancelable: false},
    );

    }, 100);