An open API service indexing awesome lists of open source software.

https://github.com/madox2/react-tagcloud

Tag/word cloud component for react https://madox2.github.io/react-tagcloud/
https://github.com/madox2/react-tagcloud

react tag-cloud word-cloud

Last synced: 5 months ago
JSON representation

Tag/word cloud component for react https://madox2.github.io/react-tagcloud/

Awesome Lists containing this project

README

          

# react-tagcloud

![](https://github.com/madox2/react-tagcloud/workflows/Tests/badge.svg)

Simple and extensible tag/word cloud React component.

See the [demo](https://madox2.github.io/react-tagcloud/).

![preview tag-cloud preview](./demo-min.png)

## Installation

```
npm install react-tagcloud

# or with yarn
yarn add react-tagcloud

# react < 16.8.0
npm install react-tagcloud@1.4
```

## Basic usage

```javascript
import { TagCloud } from 'react-tagcloud'

const data = [
{ value: 'JavaScript', count: 38 },
{ value: 'React', count: 30 },
{ value: 'Nodejs', count: 28 },
{ value: 'Express.js', count: 25 },
{ value: 'HTML5', count: 33 },
{ value: 'MongoDB', count: 18 },
{ value: 'CSS3', count: 20 },
]

const SimpleCloud = () => (
alert(`'${tag.value}' was selected!`)}
/>
)
```

### React Native

In react native projects import tag cloud from the package relative path `react-tagcloud/rn`.

```javascript
import React from 'react';

import { Alert } from 'react-native';
import { TagCloud } from 'react-tagcloud/rn'

const data = [
// ...
]

const SimpleCloud = () => (
Alert.alert(`'${tag.value}' was selected!`)}
/>
)
```

## API

### Options

`` component has props listed below:

| Option | Type | Required | Note |
|-----------|----------|--------|---|
|`tags` |`Array` |`true`|Array of objects that represent tags (see [Tag object](#tag-object))|
|`maxSize` |`Number` |`true` |Maximal font size (in px) used in cloud|
|`minSize` |`Number` |`true` |Minimal font size (in px) used in cloud|
|`shuffle` |`Boolean` |`false`|If true, tags are shuffled. When `tags` are modified, cloud is re-shuffled. Default: `true`|
|`colorOptions` |`Object` |`false`|Random color options (see [randomColor#options](https://github.com/davidmerfield/randomColor#options))|
|`disableRandomColor` |`Boolean` |`false`|If `true`, random color is not used|
|`randomSeed` |`Number` |`false`|Random seed used to shuffle tags and generate color|
|`renderer` |`Function`|`false`|Function used to render tag|
|`randomNumberGenerator`|`Function`|`false`|DEPRECATED, use `randomSeed` instead. Specifies a custom random number generator that is being used by shuffle algorithm. Default: `Math.random`|

*Note:* Furthermore you can pass any other prop and it will be forwarded to the wrapping `

` component (e.g. `style`, `className`).

### Tag object

Each tag is represented by object literal having following properties:

| Property | Type | Required | Note |
|----------|------|----------|------|
|`value`|`String`|`true` |String value to be displayed|
|`count`|`Number`|`true` |Represents frequency of the tag that is used to calculate tag size|
|`key` |`String`|`false`|Tag element key. If it is not provided, `value` property will be used instead (however it can fail if you don't have unique tag values. It is highly recommeded to use `key` property)|
|`color`|`String`|`false`|Represents color of the tag. If it is not provided, random color will be used instead|
|`props`|`Object`|`false`|Props to be passed to a particular tag component|

### Events

Event handlers can be passed to the `` props.
Each handler has two arguments: the first is related tag object and the second is DOM event object.

Currently supported events: `onClick`, `onDoubleClick`, `onMouseMove`

*Note:* Feel free to open issue if any other event is needed.

### Styles

Default class names are `tag-cloud` for the wrapping container, and `tag-cloud-tag` for a particular tag.
Styles passed to `` props will be applied to the wrapping container.

### Renderer

Rendering of tags can be fully customized by providing custom render function and passing it to the `renderer` prop.
By default is used [defaultRenderer](https://github.com/madox2/react-tagcloud/blob/master/src/defaultRenderer.js).
Render function has three arguments - `tag`, `size` and `color`.
For example:

```javascript
import { TagCloud } from 'react-tagcloud'

const customRenderer = (tag, size, color) => {
return (

{tag.value}

)
}

const CustomizedCloud = () => (

)
```

## More examples

* [Simple tag cloud](https://github.com/madox2/react-tagcloud/blob/master/examples/src/simple-cloud.js)
* [Custom color options](https://github.com/madox2/react-tagcloud/blob/master/examples/src/custom-color-options.js)
* [Custom styles](https://github.com/madox2/react-tagcloud/blob/master/examples/src/custom-styles.js)
* [Custom tag props](https://github.com/madox2/react-tagcloud/blob/master/examples/src/tag-props.js)
* [Custom renderer](https://github.com/madox2/react-tagcloud/blob/master/examples/src/custom-renderer.js)

## Testing

Install dev modules:

```
yarn install
```

### Run unit tests

```
yarn test
```

### Run examples

```
cd examples
yarn install
yarn start
```

and open browser at `http://localhost:3000`

## License

[MIT License](https://github.com/madox2/react-tagcloud/blob/master/LICENSE)