Package Exports
- diff-viz
- diff-viz/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (diff-viz) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
react-diff-viz
react-diff-viz is a React component that compares and renders complex object differences
Install
npm install react-diff-viz
Usage
import Diff from "react-diff-viz";
// describe the content to be rendered
const vizItems = [
{
path: "name",
label: "name",
},
{
path: "age",
label: "age",
},
{
path: "address",
label: "address",
content: (v) => {
return v.city + " of " + v.country;
},
},
]
// diff data1 and data2 ,then render
<Diff
data1={{
name: "John",
age: 30,
address: {
city: "New York",
country: "USA",
},
}}
data2={{
name: "John",
age: 31,
address: {
city: "New York",
country: "USA",
},
}}
vizItems={vizItems}
/>;
Features
This component integrates diff algorithm and visual rendering, features are as follows
- The left and right columns display the data, aligned to the height of corresponding field, and colored the different fields
- The component comes with the diff function. You can customize the diff function for fields
- The component has its own rendering function. You can customize rendering functions for fields
- Supports comparison of nested objects and arrays
Dependencies
- react (peer dependency)
- react-dom (peer dependency)
- lodash (peer dependency)
Demo
https://littlewhite-hai.github.io/react-diff-viz/
API
Diff Component API
Name | Type | Description |
---|---|---|
data1(required) | any | Data used for comparison (usually the original data) |
data2(required) | any | Data used for comparison (usually the new data) |
vizItems(required) | Array<VizItem> | Describes the data to be rendered, including diff method and rendering method |
colStyle | CSSProperties | Overall style for the outer DOM of all data1 and data2 |
labelStyle | CSSProperties | Style for the label of each data item |
contentStyle | CSSProperties | Style for the content of each data item |
strictMode | boolean | Strict mode, enabled by default. When disabled, the diff algorithm ignores data type differences, e.g., 0=null=undefined=false |
singleMode | boolean | Only view data2, default false |
refreshKey | number | Change this key to trigger recoloring and height alignment |
VizItems API
Name | Type | Description |
---|---|---|
label | string | Title of the data, if only label is provided, it renders a separator title |
path | string | Data path of the data |
visible | boolean | If false, the item will not be displayed |
foldable(coming soon) | boolean | Whether it can be folded |
isEqual | (v1,v2)=>boolean | Customize the data diff algorithm |
content | (v,ext)=>ReactNode | Customize the data rendering method |
arrayKey | string | Key for arrays, used to mark this data as array type |
arrayAlignType | "lcs" | "data2" | "none" | Array alignment method, default is longest common subsequence (lcs) alignment |
License
MIT