127 lines
3.1 KiB
Markdown
127 lines
3.1 KiB
Markdown
# redux-doctitle
|
||
|
||
Redux middleware for managing document title.
|
||
|
||
## Installation
|
||
|
||
redux-doctitle requires **Redux 3.0 or later**.
|
||
|
||
```
|
||
npm install --save-dev redux-doctitle
|
||
```
|
||
|
||
This assumes that you’re using [npm](http://npmjs.com/) package manager with a
|
||
module bundler like [Webpack](https://webpack.js.org/) or
|
||
[Browserify](http://browserify.org/).
|
||
|
||
## Usage
|
||
|
||
In order to use redux-doctitle in your React components you need to install the
|
||
middleware, first.
|
||
|
||
```
|
||
import {applyMiddleware, createStore} from "redux";
|
||
import {documentTitleMiddlewareFactory} from "redux-doctitle";
|
||
|
||
const documentTitleMiddleware = documentTitleMiddlewareFactory(["Example"]);
|
||
const store = createStore(
|
||
reducer, initialState, applyMiddleware(documentTitleMiddleware)
|
||
);
|
||
```
|
||
|
||
Once this is done, you can use the provided action to change document title
|
||
from your React components.
|
||
|
||
```
|
||
import PropTypes from "prop-types";
|
||
import React from "react";
|
||
import {connect} from "react-redux";
|
||
import {bindActionCreators} from "redux";
|
||
import {setDocumentTitle} from "redux-doctitle";
|
||
|
||
class HelloWorldComponent extends React.Component {
|
||
componentDidMount () {
|
||
this.props.actions.setDocumentTitle("Hello, World!");
|
||
}
|
||
render () {
|
||
return <div>Hello, World!</div>;
|
||
}
|
||
}
|
||
|
||
HelloWorldComponent.propTypes = {
|
||
actions: PropTypes.shape({
|
||
setDocumentTitle: PropTypes.func.isRequired
|
||
});
|
||
};
|
||
|
||
const mapStateToProps = (state, props) => {
|
||
return {};
|
||
};
|
||
|
||
const mapDispatchToProps = (dispatch, props) => {
|
||
const actions = bindActionCreators(
|
||
{
|
||
setDocumentTitle: setDocumentTitle
|
||
},
|
||
dispatch
|
||
);
|
||
};
|
||
|
||
const reduxContainer = connect(
|
||
mapStateToProps, mapDispatchToProps
|
||
)(HelloWorldComponent);
|
||
|
||
export default reduxContainer;
|
||
```
|
||
|
||
## API
|
||
|
||
### `documentMiddlewareFactory(defaultTitleParts = [])`
|
||
|
||
This is the middleware factory function. The *defaultTitleParts* argument is an
|
||
optional array of title parts which will be appended to custom titles set
|
||
through the `setDocumentTitle` action creator. If it's ommited, nothing will be
|
||
appended.
|
||
|
||
Returns Redux-compatible middleware function.
|
||
|
||
### `setDocumentTitle(title = "")`
|
||
|
||
This is the action creator that allows changing the document title.
|
||
|
||
Returns Redux action.
|
||
|
||
## Development
|
||
|
||
To bootstrap the development environment, clone the repo and run `npm install`
|
||
from the root directory.
|
||
|
||
The `package.json` file provides the following scripts:
|
||
|
||
* `build` - builds the library modules (minified and development with source
|
||
map),
|
||
* `dev` - starts Webpack watcher configured to build development library,
|
||
* `lint` - performs an eslint run over the source code,
|
||
* `test` - performs a single test run,
|
||
* `test:watch` - starts karma with watcher.
|
||
|
||
**NOTE**: Tests require *Chromium* to be installed and available in the path.
|
||
Consult
|
||
[karma-chrome-launcher](https://github.com/karma-runner/karma-chrome-launcher)
|
||
docs for more info.
|
||
|
||
## Contributing
|
||
|
||
If you think you found a bug or want to send a patch, feel free to contact
|
||
me through e-mail.
|
||
|
||
If you're sending a patch, make sure it passes eslint checks and is tested.
|
||
|
||
## Author
|
||
|
||
redux-doctitle is developed by [Tomek Wójcik](https://www.bthlabs.pl/).
|
||
|
||
## License
|
||
|
||
redux-doctitle is licensed under the MIT License.
|