react-hashchange
Version:
React component that notifies when browser's hash changes.
123 lines (85 loc) • 2.75 kB
Markdown
react-hashchange
================
> React component that notifies when browser's hash (i.e. `window.location.hash`) changes.
## Install
```sh
$ yarn add react-hashchange
# npm v5+
$ npm install react-hashchange
# before npm v5
$ npm install --save react-hashchange
```
## Usage
```js
// 3rd-party imports
import ReactDOM from "react-dom";
import React, { Component } from "react";
import HashChange from "react-hashchange";
// function as child component
ReactDOM.render(
<HashChange onChange={({ hash }) => console.log({ hash })}>
{({ hash }) => {
return <div>{`hash: ${hash}`}</div>;
}}
</HashChange>,
mountNode
);
// render prop
const render = ({ hash }) => {
return <div>{`hash: ${hash}`}</div>;
};
ReactDOM.render(
<HashChange
onChange={({ hash }) => console.log({ hash })}
render={render}
/>,
mountNode
);
```
## Props
### `render` (optional)
This is a `render` prop. To learn what that is, read: https://cdb.reacttraining.com/use-a-render-prop-50de598f11ce
An optional function that is called whenever the browser's hash (i.e. `window.location.hash`) changes.
The `render` function is invoked with an object argument: `({ hash })`.
It's expected that `render` function returns a single React element.
This has same API semantics as [`React.Component.render()`](https://facebook.github.io/react/docs/react-component.html#render).
If `render` function is given, it has precedence over any given child component:
```js
<HashChange
render={() => {
return (
<div>"I take precedence over any function as child component."</div>
);
}}
>
{() => {
return <div>"I will not render."</div>;
}}
</HashChange>
```
### Function as child component (optional)
Same as `render` prop function (see above).
If `render` function is not given, then the child component will be invoked as a function.
The child component function is invoked with an object argument: `({ hash })`.
```js
<HashChange>
{({ hash }) => {
return <div>{`hash: ${hash}`}</div>;
}}
</HashChange>
````
### `onChange` (optional)
An optional function that is called whenever the browser's hash (i.e. `window.location.hash`) changes.
The `onChange` function is invoked with an object argument: `({ hash })`.
### `getLocationHash` (optional)
An optional function that returns the browser's hash. This function is called whenever `hashchange` event occurs.
If necessary, you may provide your own implementation of `getLocationHash` (e.g. handling browser nuances).
By default the implementation of `getLocationHash` is:
```js
const getLocationHash = () => {
return window.location.hash;
};
```
License
=======
MIT.