包详细信息

@gtk-grafana/react-json-tree

gtk-grafana2.8kMIT0.0.12

React JSON Viewer Component, Extracted from redux-devtools

react, json viewer

自述文件

react-json-tree

React JSON Viewer Component, Extracted from redux-devtools. Supports iterable objects, such as Immutable.js.

Usage

import { JSONTree } from "react-json-tree";
// If you're using Immutable.js: `npm i --save immutable`
import { Map } from "immutable";

// Inside a React component:
const json = {
  array: [1, 2, 3],
  bool: true,
  object: {
    foo: "bar",
  },
  immutable: Map({ key: "value" }),
};

<JSONTree data={json} />;

Theming

Styling is managed via scss modules and css variables, it should be straight-forward to override these styles in the consuming application. Basic theming is possible by overwriting the CSS variables in the _variables.scss.

For example:

```typescript jsx

<JSONTree data={data}/>

`

Advanced Customization

<div>
  <JSONTree
    data={data}
  />
</div>
`

Customize Labels for Arrays, Objects, and Iterables

You can pass getItemString to customize the way arrays, objects, and iterable nodes are displayed (optional).

By default, it'll be:

<JSONTree getItemString={(type, data, itemType, itemString, keyPath)
  => <span>{itemType} {itemString}</span>}

But if you pass the following:

const getItemString = (type, data, itemType, itemString, keyPath)
    => (<span> // {type}</span>);

Then the preview of child elements now look like this:

get-item-string-example.png

Customize Rendering

You can pass the following properties to customize rendered labels and values:

<JSONTree
  labelRenderer={([key]) => <strong>{key}</strong>}
  valueRenderer={(raw) => <em>{raw}</em>}
/>

In this example the label and value will be rendered with <strong> and <em> wrappers respectively.

For labelRenderer, you can provide a full path - see this PR.

Their full signatures are:

  • labelRenderer: function(keyPath, nodeType, expanded, expandable)
  • valueRenderer: function(valueAsString, value, ...keyPath)

Adding interactive elements:

Using the labelRenderer method, you can add interactive elements to the labels:

```typescript jsx // ...

<JSONTree data={data} labelRenderer={(keyPath, nodeType, expanded) => { <IconButton name={"plus-circle"} /> <IconButton name={"minus-circle"} /> {keyPath[0]} }} /> ```

buttons-example.png

More Options

  • shouldExpandNodeInitially: function(keyPath, data, level) - determines if node should be expanded when it first renders (root is expanded by default)
  • hideRoot: boolean - if true, the root node is hidden.
  • sortObjectKeys: boolean | function(a, b) - sorts object keys with compare function (optional). Isn't applied to iterable maps like Immutable.Map.
  • postprocessValue: function(value) - maps value to a new value
  • isCustomNode: function(value) - overrides the default object type detection and renders the value as a single value
  • collectionLimit: number - sets the number of nodes that will be rendered in a collection before rendering them in collapsed ranges
  • keyPath: (string | number)[] - overrides the initial key path for the root node (defaults to [root])

Credits

Similar Libraries

License

MIT

更新日志

Change Log

0.0.11

Feat: add scrollToPath #21

0.0.4

A11y: Keyboard navigation and aria attributes: #10

0.0.3

Position arrows absolutely to keep labels of the same depth aligned horizontally: #8

0.0.2

Fixed bug with collapsed top-level expandable nodes.

0.0.1

  • Forked from 0.20.0 react-json-tree
  • The aim of this version is to be as small and performant as possible, while providing flexibility in styling to enable interactive functionality by the consuming application.
  • Removing all external dependencies.
  • Scss modules and css variables added to replace inline styles from react-base-16-styling package.
  • Unpacked size 16.46 kB │ gzip: 4.39 kB