I am quite new in React. I have build an event scheduler web app but it’s only working in my browser if I try it to different browsers or someone else system it gives me this error:
A cross-origin error was thrown. React doesn’t have access to the actual error object in development.
I am trying to figure out but all I can understood it’s happening because I am giving default values in state if local storage in undefined. Here is my complete code.
This is the component that is getting the error:
JavaScript
x
61
61
1
import React from "react";
2
import { Container, Row, Table } from "react-bootstrap";
3
import EventModal from "./EventModalButton";
4
5
class EventList extends React.Component {
6
constructor(props) {
7
super(props);
8
this.state = {
9
title: "",
10
eventtype: "",
11
time: ""
12
};
13
}
14
15
componentDidMount() {
16
const defaultData = {
17
title: "AI",
18
eventtype: "Workshop",
19
time: "02:00PM"
20
};
21
const eventData = JSON.parse(localStorage.getItem("Data") || defaultData);
22
this.setState({
23
title: eventData.title,
24
eventtype: eventData.eventtype,
25
time: eventData.time
26
});
27
}
28
29
render() {
30
return (
31
<Container fluid="md">
32
<Table striped bordered hover>
33
<thead>
34
<tr>
35
<th>Title</th>
36
<th>Type</th>
37
<th>Time</th>
38
<th>Date</th>
39
</tr>
40
</thead>
41
<tbody>
42
<tr>
43
<td>{this.state.title}</td>
44
<td>{this.state.eventtype}</td>
45
<td>{this.state.time}</td>
46
<td>Monday, 31/08/2020</td>
47
</tr>
48
</tbody>
49
</Table>
50
51
<Container className="row" />
52
<Row className="justify-content-center">
53
<EventModal />
54
</Row>
55
</Container>
56
);
57
}
58
}
59
export default EventList;
60
61
Advertisement
Answer
You’re trying to parse
an object. JSON.parse
expects a JSON but you’re passing an object.
You could check the sandbox here
JavaScript
1
16
16
1
componentDidMount() {
2
const defaultData = {
3
title: "AI",
4
eventtype: "Workshop",
5
time: "02:00PM"
6
};
7
8
// JSON.parse throws an error when parsing the object.
9
const eventData = JSON.parse(localStorage.getItem("Data")) || defaultData;
10
this.setState({
11
title: eventData.title,
12
eventtype: eventData.eventtype,
13
time: eventData.time
14
});
15
}
16