
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
react-native-dialog-ct
Advanced tools
A pure JavaScript React-Native dialog that follows closely the UI of its native counterpart while expanding its features.
Install the library using npm or yarn:
# using npm
$ npm install react-native-dialog --save
# using yarn
$ yarn add react-native-dialog
React-native-dialog exposes a set of components that can be used to build the UI of the dialog:
Text component styled as a native dialog title.Text component styled as a native dialog description.TextInput component styled as a native dialog input.Switch component with an optional label.import Dialog from "react-native-dialog";
render () {
return (
<View>
<Dialog.Container>
<Dialog.Title>Account delete</Dialog.Title>
<Dialog.Description>
Do you want to delete this account? You cannot undo this action.
</Dialog.Description>
<Dialog.Button label="Cancel" />
<Dialog.Button label="Delete" />
</Dialog.Container>
</View>
)
}
visible prop to true:render () {
return (
<View>
<Dialog.Container visible={true}>
<Dialog.Title>Account delete</Dialog.Title>
<Dialog.Description>
Do you want to delete this account? You cannot undo this action.
</Dialog.Description>
<Dialog.Button label="Cancel" />
<Dialog.Button label="Delete" />
</Dialog.Container>
</View>
)
}
The visible prop is the only prop you'll really need to make the dialog work: you should control this prop value by saving it in your state and setting it to true or false when needed.
The following example consists in a component (DialogTester) with a button and a dialog.
The dialog is controlled by the dialogVisible state variable and it is initially hidden, since its value is false.
Pressing the button sets dialogVisible to true, making the dialog visible.
Inside the dialog there are two button that, when pressed, sets dialogVisible to false, hiding the dialog.
import React, { Component } from "react";
import { Text, TouchableOpacity, View } from "react-native";
import Dialog from "react-native-dialog";
export default class DialogTester extends Component {
state = {
dialogVisible: false
};
showDialog = () => {
this.setState({ dialogVisible: true });
};
handleCancel = () => {
this.setState({ dialogVisible: false });
};
handleDelete = () => {
// The user has pressed the "Delete" button, so here you can do your own logic.
// ...Your logic
this.setState({ dialogVisible: false });
};
render() {
return (
<View>
<TouchableOpacity onPress={this.showDialog}>
<Text>Show Dialog</Text>
</TouchableOpacity>
<Dialog.Container visible={this.state.dialogVisible}>
<Dialog.Title>Account delete</Dialog.Title>
<Dialog.Description>
Do you want to delete this account? You cannot undo this action.
</Dialog.Description>
<Dialog.Button label="Cancel" onPress={this.handleCancel} />
<Dialog.Button label="Delete" onPress={this.handleDelete} />
</Dialog.Container>
</View>
);
}
}
| Name | Type | Default | Description |
|---|---|---|---|
| label | string | REQUIRED | The label text |
| color | string | #007ff9 on iOS, #169689 on Android | The label color |
| bold | bool | false | Show the label with a bold font weight? |
| disabled | bool | false | Disable the button? |
| onPress | func | REQUIRED | Called when the button is pressed |
| Name | Type | Default | Description |
|---|---|---|---|
| children | string | REQUIRED | The description text |
| Name | Type | Default | Description |
|---|---|---|---|
| blurComponentIOS | node | A low-opacity | The blur component used in iOS |
| visible | bool | REQUIRED | Show the dialog? |
| children | node | REQUIRED | The dialog content |
| contentStyle | any | undefined | Extra style applied to the dialog content |
| headerStyle | any | undefined | Extra style applied to the dialog header |
| footerStyle | any | undefined | Extra style applied to the dialog footer |
| buttonSeparatorStyle | any | undefined | Extra style applied to the dialog button separator |
| Name | Type | Default | Description |
|---|---|---|---|
| label | string | undefined | The input floating label |
| wrapperStyle | any | undefined | The style applied to the input wrapper View |
Dialog.Input also accepts all the React-Native's TextInput component props.
| Name | Type | Default | Description |
|---|---|---|---|
| children | string | REQUIRED | The title text |
Dialog.Title also accepts all the React-Native's Text component props.
| Name | Type | Default | Description |
|---|---|---|---|
| label | string | undefined | The switch description text |
Dialog.Switch also accepts all the React-Native's Switch component props.
Picker for example)BlurViewTo achieve a look even closer to the native iOS dialog you can provide your own component in the blurComponentIOS prop of a Dialog.Container and it will be injected in the dialog to be used as a background.
The blurComponentIOS can be useful for example if you want to apply native blur effect to the dialog.
Here is an example using react-native-blur:
render() {
const blurComponentIOS = (
<BlurView
style={StyleSheet.absoluteFill}
blurType="xlight"
blurAmount={50}
/>
)
return (
<View style={styles.container}>
<Dialog.Container
visible={this.state.dialogVisible}
blurComponentIOS={blurComponentIOS}
>
<Dialog.Title>Account delete</Dialog.Title>
<Dialog.Description>
Do you want to delete this account? You cannot undo this action.
</Dialog.Description>
<Dialog.Button label="Cancel" onPress={this.handleCancel} />
<Dialog.Button label="Delete" onPress={this.handleConfirm} />
</Dialog.Container>
</View>
);
}
react-native-dialog uses react-native-modal for the backdrop and any properties you add to Dialog.Container are mapped through to the modal.
react-native-modal has an onBackdropPress property that can be used to register clicks on the backdrop.
Below is an example on how you can close the dialog by tapping outside.
render() {
const { onCancel, visible } = this.props;
const reactNativeModalProps = {
onBackdropPress: onCancel,
};
return (
<Dialog.Container visible={visible} {...reactNativeModalProps}>
<Dialog.Title>{'title'}</Dialog.Title>
<Dialog.Button label="cancel" onPress={onCancel} />
</Dialog.Container>
);
}
onCancel() {
this.setState({
visible: false,
})
}
Thanks to the user @honaf who has kindly offered the react-native-dialog namespace.
Also thanks to the user @leecade who offered the namespace react-native-alert (which has not been used since "Dialog" seems to suit better this component).
FAQs
A flexible react-native dialog frok from react-native-dialog
We found that react-native-dialog-ct demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.