Easy, convenient, quick-forming Wizard component for React Native. Also this package is providing simple usage with few props and functions. You can see examples below the page.
- contentContainerStyle added.
- useNativeDriver flag added.
With NPM
npm install --save react-native-wizard
With YARN
yarn add react-native-wizard
Props | Description | Type | Required | Default |
---|---|---|---|---|
activeStep | For setting active step at start. | int |
No | 0 |
ref | You need to set ref for using some function like goTo() , next() etc. |
void |
Yes | - |
currentStep | You can get current step index. Also you can get that step is last step or first step. Also you can use isFirstStep and isLastStep callbacks. | void |
No | - |
isFirstStep | You can get active step is first step or not with this callback. This callback is returning boolean value |
void |
No | - |
isLastStep | You can get active step is last step or not with this callback. This callback is returning boolean value |
void |
No | - |
duration | You can set duration of transition animation. | int |
No | 500 |
onNext | If next button click and step is change, this function will run. | void |
No | - |
onPrev | If prev button click and step is change, this function will run. | void |
No | - |
steps | You can set steps with this prop. | object |
Yes | - |
nextStepAnimation | You can set animation for next step transition. | string |
No | fade |
prevStepAnimation | You can set animation for prev step transition. | string |
No | fade |
useNativeDriver | You can set useNativeDriver for all Animated used by the package (more info here). | boolean |
No | true |
You can use this animations for prevStep
or nextStep
Animation List |
---|
fade |
slideLeft |
slideRight |
slideUp |
slideDown |
With functional component and hooks
I sincerely recommend using hooks
.
import React, {useRef} from 'react'
import Wizard, { WizardRef } from 'react-native-wizard';
const wizard = useRef<WizardRef>(null)
// Usage
<Wizard ref={wizard} />
With class component
If you're not using functional component then you should create a ref with React.createRef()
.
import Wizard, { WizardRef } from 'react-native-wizard';
wizard = React.createRef<WizardRef>(null)
<Wizard ref={this.wizard} />
Props | Usage without useRef | Usage with useRef |
---|---|---|
next() | this.wizard.current.next() | wizard.current.next() |
prev() | this.wizard.current.prev() | wizard.current.prev() |
goTo(stepIndex ) |
this.wizard.current.goTo(stepIndex ) |
wizard.current.goTo(stepIndex ) |
This wizard using your component class/function as a child. Every time this Wizard rendering your active step.
import React, {useRef,useState} from 'react'
// import Wizard
import Wizard, { WizardRef } from 'react-native-wizard';
// Import your own step components
import Step1 from "./yourStepsDir/Step1";
import Step2 from "./yourStepsDir/Step2";
import Step3 from "./yourStepsDir/Step3";
// ...
const wizard = useRef<WizardRef>(null);
const [isFirstStep, setIsFirstStep] = useState()
const [isLastStep, setIsLastStep] = useState()
const stepList = [
{
content: <Image source={{uri: "http://placehold.it/96x96"}} style={{width:50, height:50}}/>,
},
{
content: <Step2 testProp="Welcome to Second Step"/>
},
{
content: <Step3 step3Prop="Welcome to Third Step"/>
},
]
<Wizard
ref={wizard}
activeStep={0}
steps={stepList}
isFirstStep={val => setIsFirstStep(val)}
isLastStep={val => setIsLastStep(val)}
onNext={() => {
console.log("Next Step Called")
}}
onPrev={() => {
console.log("Previous Step Called")
}}
currentStep={({ currentStep, isLastStep, isFirstStep }) => {
setCurrentStep(currentStep)
}}
/>
import React, { useRef, useState } from "react"
import { SafeAreaView, Button, View, Text } from "react-native"
import Wizard, { WizardRef } from "react-native-wizard"
export default () => {
const wizard = useRef<WizardRef>(null)
const [isFirstStep, setIsFirstStep] = useState(true)
const [isLastStep, setIsLastStep] = useState(false)
const [currentStep, setCurrentStep] = useState(0)
const stepList = [
{
content: <View style={{ width: 100, height: 100, backgroundColor: "#000" }} />,
},
{
content: <View style={{ width: 100, height: 100, backgroundColor: "#e04851" }} />,
},
{
content: <View style={{ width: 100, height: 500, backgroundColor: "#9be07d" }} />,
},
{
content: <View style={{ width: 100, height: 100, backgroundColor: "#2634e0" }} />,
},
]
return (
<View>
<SafeAreaView style={{ backgroundColor: "#FFF" }}>
<View
style={{
justifyContent: "space-between",
flexDirection: "row",
backgroundColor: "#FFF",
borderBottomColor: "#dedede",
borderBottomWidth: 1,
}}>
<Button disabled={isFirstStep} title="Prev" onPress={() => wizard.current.prev()} />
<Text>{currentStep + 1}. Step</Text>
<Button disabled={isLastStep} title="Next" onPress={() => wizard.current.next()} />
</View>
</SafeAreaView>
<View style={{ flexDirection: "column", alignItems: "center", justifyContent: "center" }}>
<Wizard
ref={wizard}
steps={stepList}
isFirstStep={val => setIsFirstStep(val)}
isLastStep={val => setIsLastStep(val)}
onNext={() => {
console.log("Next Step Called")
}}
onPrev={() => {
console.log("Previous Step Called")
}}
currentStep={({ currentStep, isLastStep, isFirstStep }) => {
setCurrentStep(currentStep)
}}
/>
<View style={{ flexDirection: "row", margin: 18 }}>
{stepList.map((val, index) => (
<View
key={"step-indicator-" + index}
style={{
width: 10,
marginHorizontal: 6,
height: 10,
borderRadius: 5,
backgroundColor: index === currentStep ? "#fc0" : "#000",
}}
/>
))}
</View>
</View>
</View>
)
}
This project is licensed under the MIT License - see the LICENSE.md file for details