Tourist Guide into your React Components
reactour
Tourist Guide into your React Components.
Install
npm i --save reactour
yarn add reactour
Initialize
Add the Tour Component in your Application:
import Tour from 'reactour'
class App extends Component {
  // ...
  render  (
    <div>
      { /* other stuff */}
      <Tour
        steps={steps}
        isOpen={this.state.isTourOpen}
        onRequestClose={this.closeTour} />
    </div>
  )
}
const steps = [
  {
    selector: '.first-step',
    content: 'This is my first Step',
  },
  // ...
]
PropTypes
| Prop | Desc | Type | Default | Is Required | 
|---|---|---|---|---|
accentColor | 
Change --reactour-accent color (helper number + dots) | 
string | 
#007aff | 
|
badgeContent | 
Function to customize Badge content (current, total) => {} | 
func | 
||
className | 
Custom class to add to the helper | string | 
||
closeWithMask | 
Close clicking the mask | bool | 
true | 
|
disableDotsNavigation | 
Isn't possible to interact with helper dots | bool | 
||
disableInteraction | 
Isn't possible to interact with highlighted elements | bool | 
||
disableKeyboardNavigation | 
Isn't possible to interact with keyboard arrows | bool | 
||
getCurrentStep | 
Function triggered each time current step change | func | 
step => { /* 'step' is the current step index */ } | 
|
goToStep | 
Programmatically change current step | number | 
||
highlightedMaskClassName | 
Custom class name for element which is overlaid target element | string | 
||
inViewThreshold | 
Scroll element to show when is outiside viewport adding this threshold value | number | 
||
isOpen | 
You know… | bool | 
✅ | |
lastStepNextButton | 
Change Next button in last step into a custom button to close the Tour | node | 
||
maskClassName | 
Custom class to add to the mask | string | 
||
maskSpace | 
Padding between elemente showed and mask | number | 
10 | 
|
nextButton | 
Next navigation button text | node | 
||
nextStep | 
Override default nextStep function to use a custom one | 
func | 
||
onAfterOpen | 
Function triggered after open | func | 
() => { document.body.style.overflowY = 'hidden' } | 
|
onBeforeClose | 
Function triggered before close | func | 
() => { document.body.style.overflowY = 'auto' } | 
|
onRequestClose | 
Function triggered to close | func | 
||
prevButton | 
Prev navigation button text | node | 
||
prevStep | 
Override default prevStep function to use a custom one | 
func | 
||
rounded | 
Beautify helper + mask with border-radius (in px) | number | 
0 | 
|
scrollDuration | 
Smooth scroll duration when positioning the target element | number | 
1 | 
|
scrollOffset | 
Offset when positioning the target element | number | 
calculates the vertical center of the page | |
showButtons | 
Show helper navigation butons | bool | 
true | 
|
showNavigation | 
Show helper navigation dots | bool | 
true | 
|
showNavigationNumber | 
Show number when hovers on each navigation dots | bool | 
true | 
|
showNumber | 
Show helper number badge | bool | 
true | 
|
startAt | 
Starting step each time the Tour is open | number | 
||
steps | 
Array of steps with info and props | 
[view bellow] | ✅ | |
update | 
Value to listen if a forced update is needed | string | 
||
updateDelay | 
Delay time when forcing update. Useful when there are known animation/transitions | number | 
1 | 
steps: PropTypes.arrayOf(PropTypes.shape({
  'selector': PropTypes.string,
  'content': PropTypes.oneOfType([
    PropTypes.node,
    PropTypes.element,
    PropTypes.func,
  ]).isRequired,
  'position': PropTypes.oneOf(['top', 'right', 'bottom', 'left', 'center']),
  'action': PropTypes.func,
  'style': PropTypes.object,
})),
Steps example
const steps = [
  {
    selector: '[data-tour="my-first-step"]',
    content: ({ goTo, inDOM }) => (
      <div>
        Lorem ipsum <button onClick={() => goTo(4)}>Go to Step 5</button>
        <br />
        {inDOM && '? Look at your step!'}
      </div>
    ),
    position: 'top',
    action: node => {
      node.focus()
      console.log('yup, the target element is also focused!')
    },
    style: {
      backgroundColor: '#bada55',
    },
  },
  // ...
]