adam-26/react-router-metadata

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# react-router-metadata

[![npm](https://img.shields.io/npm/v/react-router-metadata.svg)](https://www.npmjs.com/package/react-router-metadata)
[![npm](https://img.shields.io/npm/dm/react-router-metadata.svg)](https://www.npmjs.com/package/react-router-metadata)
[![CircleCI branch](https://img.shields.io/circleci/project/github/adam-26/react-router-metadata/master.svg)](https://circleci.com/gh/adam-26/react-router-metadata/tree/master)
[![Maintainability](https://api.codeclimate.com/v1/badges/01536aa6e4ae39932ba2/maintainability)](https://codeclimate.com/github/adam-26/react-router-metadata/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/01536aa6e4ae39932ba2/test_coverage)](https://codeclimate.com/github/adam-26/react-router-metadata/test_coverage)
[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)

Assigns HTML metadata to [react-router-config](https://github.com/ReactTraining/react-router/tree/master/packages/react-router-config) routes using static functions.

Internally, [react-html-metadata](https://github.com/adam-26/react-html-metadata) is used to support the use of metadata with the react SSR stream interface, for more information
about how to define metadata you should view that packages [readme file](https://github.com/adam-26/react-html-metadata).

## Usage

This package is intended to be used with other packages that invoke the static metadata methods.

**You should use one of the current implementations**:

  * [react-router-dispatcher-metadata](https://github.com/adam-26/react-router-dispatcher-metadata)

#### Defining metadata


```js
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import withReactRouterMetadata from 'react-router-metadata';

class MetadataDemo extends Component {

  static propTypes = {
    name: PropTypes.string
  };

  static getMetadata(props) {
    const { name, location, match } = props;

    // Return the metadata
    // see react-html-metadata docs for permitted syntax
    return {
      title: `Welcome ${name}`
    };
  }

  render() {
    return <div>`Hello ${this.props.name}`</div>
  }
}

// This function is used to map `params` to match the component `props`
// Other packages use this to resolve params to props
const mapParamsToProps(params, routerCtx) => {
  const { store } = params;

  // Return the component `props`
  return {
    name: store.user.name
  };
};

export default withReactRouterMetadata({ mapParamsToProps })(MetadataDemo);

```


### Install

#### NPM

```js
npm install --save react-router-metadata
```

#### Yarn

```js
yarn add react-router-metadata
```

### API

`withReactRouterMetadata(options)`

#### Options

`mapParamsToProps?: (params: Object, routerCtx: { route: Object, routeComponentKey: string }) => Object`: Optional

* Optionally, use a function that maps parameters to match the component props.

* This is **only required if your `getMetadata` implementation uses prop values**.

`staticMethodName?: string`:

* The static _method name_ that **must** be invoked on the component before render.

* **default**: preloadMetadata

`componentStaticMethodName?: string`

* The static _method name_ that **must** be implemented by the developer to return metadata.

* **default**: getMetadata

`metadataPropName?: string`

* The _name_  (or key) used by the parameters to store the **metadata** instance

* **default**: metadata

### Contribute
For questions or issues, please [open an issue](https://github.com/adam-26/react-html-metadata/issues), and you're welcome to submit a PR for bug fixes and feature requests.

Before submitting a PR, ensure you run `npm test` to verify that your coe adheres to the configured lint rules and passes all tests. Be sure to include unit tests for any code changes or additions.

### License
MIT