Alert.alert在React原生iOS中不工作,但在Android中完全正常

sxpgvts3  于 2022-12-09  发布在  Android
关注(0)|答案(5)|浏览(123)

请检查代码、

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:-这是我现在可以分享的最多的代码,编辑过的代码请现在检查,如果你有任何问题,请告诉我。

b4lqfgs4

b4lqfgs41#

我不知道到底发生了什么,还有一个模型组件,我用来显示自定义加载,删除模型组件后,警报开始工作。

gstyhher

gstyhher2#

将警报代码替换为以下代码

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 }
      );
64jmpszr

64jmpszr3#

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);
6qqygrtg

6qqygrtg4#

在我的例子中,我没有使用任何自定义Modal,因为对于自定义Modal,解决方案很简单,只需等到Modal关闭,但是,我使用了react-nativeSpinner组件,并且使用visible={loading}属性正确地隐藏了它,是的,在Alert.alert配置中设置cancelable: false后,问题也没有得到解决,当我将超时增加到5000时,即使没有在Alert.alert配置中定义cancelable: false,它也能正常工作,但大量超时对UX,所以我很快检查了Spinner组件 prop ,我知道它确实有cancelable?: boolean | undefined prop ,所以现在当我使用Spinner组件时,它甚至没有超时。

<Spinner
    visible={loading}
    cancelable={true}
/>

**TLDR:**使用cancelable={true} prop 和Spinner组件。

pvabu6sv

pvabu6sv5#

大概和这个问题有关:https://github.com/facebook/react-native/issues/10471
出于一些奇怪的原因,在“setTimeout”函数中调用Alert可以使它工作。但这显然不是避免这个问题的最佳方法。您也可以尝试以下解决方案:https://github.com/facebook/react-native/issues/10471#issuecomment-513641325

setTimeout(() => {
    Alert.alert(
      "title",
      "content",
      [
        {
          text: "ok",
          onPress: () => {

          },
        },
      ],
    )
  }, 10)

相关问题