diff --git a/src/formatter/sortObject.js b/src/formatter/sortObject.js
index 6871d0041..85655415c 100644
--- a/src/formatter/sortObject.js
+++ b/src/formatter/sortObject.js
@@ -23,8 +23,13 @@ export default function sortObject(value: any): any {
if (key === '_owner') {
return result;
}
- // eslint-disable-next-line no-param-reassign
- result[key] = sortObject(value[key]);
+ if (key === 'current') {
+ // eslint-disable-next-line no-param-reassign
+ result[key] = '[Circular]';
+ } else {
+ // eslint-disable-next-line no-param-reassign
+ result[key] = sortObject(value[key]);
+ }
return result;
}, {});
}
diff --git a/src/index.spec.js b/src/index.spec.js
index 9103d139a..054f6d3c2 100644
--- a/src/index.spec.js
+++ b/src/index.spec.js
@@ -1126,4 +1126,27 @@ describe('reactElementToJSXString(ReactElement)', () => {
}
expect(mount().find('#hello')).toHaveLength(1);
});
+
+ it('should not cause recursive loop when an element contains a ref', () => {
+ expect.assertions(1);
+ class App extends Component {
+ constructor(props) {
+ super(props);
+ this.inputRef = React.createRef();
+ }
+ componentDidMount() {
+ expect(reactElementToJSXString()).toEqual(
+ ``
+ );
+ }
+ render() {
+ return ;
+ }
+ }
+ mount();
+ });
});