React Native - Alert组件方法中的"type"是什么意思?

4
我是React Native的新手,在阅读Alert组件时,看到了alert方法static alert(title, message?, buttons?, options?, type?) Facebook提供的示例:
Alert.alert(
   //Title
  'Alert Title',
   //Message
  'My Alert Msg', 
   //Button
  [
    {text: 'Ask me later', onPress: () => console.log('Ask me later pressed')},
    {text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel'},
    {text: 'OK', onPress: () => console.log('OK Pressed')},
  ],
   //Options
  { cancelable: false } 
)

没有关于type的示例,有人能告诉我这些type是用来做什么的吗?

是否有一种方法可以在没有Title的情况下显示Alert

2个回答

5
我阅读了源代码,发现type是一个定义为字符串的变量:
type AlertType = "default" | "plain-text" | "secure-text" | "login-password";

然而,我尝试了所有的方法,却没有看到任何区别。因此,我猜测:也许它只适用于Android,而不是iOS,但是发现在Android中 Alert 被定义为:

export interface AlertAndroidStatic {
    alert: (
        title: string,
        message?: string,
        buttons?: AlertButton[],
        options?: AlertOptions
    ) => void;
}

在一些情况下,type参数是不被接受的。然后,我继续阅读另一个类似的仅适用于iOS的React Native API,名为AlertIOS,它有两种用法。第一种用法与Alert API相同,您只需

AlertIOS.alert(title, message, buttons, type)

但是这个注释说:

@param type 已弃用,请勿使用

AlertIOS 的第二种用法是:

AlertIOS.prompt(title, message, buttons, type, defaultValue)

在提示用户输入的地方,这里的参数type会起作用,如果你希望用户输入纯文本中的一行,则type应为“plain-text”,如果是安全文本中的一行,则应为“secure-text”,如果是登录凭据,则type应为“login-password”。请注意,在Android上,您无法使用Alert提示用户输入,而AlertIOS仅适用于iOS。
结论:我不知道为什么typeAlert API的第4个参数,对于Android,此参数将被简单忽略,而对于iOS,此参数没有任何区别。我的猜测是,在React Native刚推出时,他们没有编写名为AlertIOS的API,而是只有Alert。由于在iOS设备上可用于提示用户输入,但在Android设备上不可用,因此他们将type放置为第4个参数,但在应用程序在Android设备上运行时忽略它。随着时间的推移,他们制作了一个名为AlertIOS的专门用于iOS警报的API,但尚未停用type参数。无论如何,只需忽略该参数即可。
回答您的另一个问题:是否有一种方法可以在没有标题的情况下显示Alert?
是的,如果您不想要标题或消息,只需将null传递给API调用。

1
非常感谢您,答案太棒了,让我理解了“Alert”的流程。 - flix

-2
export interface AlertAndroidStatic {
    alert: (
        title: string,
        message?: string,
        buttons?: AlertButton[],
        options?: AlertOptions
    ) => void;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接