Reputation: 301
I am trying to check if latitude
and longitude
exist in my SQL database, as currently when they are undefined, it leaves my web app blank on load with the following error TypeError: Cannot read property 'latitude' of undefined
My code was originally
const [viewport, setViewport] = useState({
//If we know where the first device is, use that to center map ELSE just show the whole world map and let user navigate to them
latitude: Number(device.deviceData[0].latitude) ? Number(device.deviceData[0].latitude): 38.2700 ,
longitude: Number(device.deviceData[0].longitude) ? Number(device.deviceData[0].longitude) : 100.8603,
width:"80vw",
height:"80vh",
zoom:Number(device.deviceData[0].latitude) ? 10 : 1
})
Where device.deviceData is pulling data from my table in SQL.
I adjusted it to make sure the length of the array from SQL was greater than 0, but this made no difference to the TypeError
const [viewport, setViewport] = useState ({
latitude: device.deviceData.length > 0 ? Number(device.deviceData[0].latitude): 38.2700 ,
longitude: device.deviceData.length > 0 ? Number(device.deviceData[0].longitude) : 100.8603,
...
and I've tried using console.log to make sure the length is really 0
const [viewport, setViewport] = useState => console.log(device.deviceData.length) ({
latitude: device.deviceData.length > 0 ? Number(device.deviceData[0].latitude): 38.2700 ,
longitude: device.deviceData.length > 0 ? Number(device.deviceData[0].longitude) : 100.8603,
...
Other tried fixes:
const [viewport, setViewport] = useState => console.log(device.deviceData.length) ({
if (Number(device.deviceData[0].latitude)) {
latitude: Number(device.deviceData[0].latitude) ? Number(device.deviceData[0].latitude): 38.2700 ,
longitude: Number(device.deviceData[0].longitude) ? Number(device.deviceData[0].longitude) : 100.8603,
...
const [viewport, setViewport] = useState => console.log(device.deviceData.length) ({
if (Number(device.deviceData[0].latitude) != null) {
latitude: Number(device.deviceData[0].latitude) > 0 ? Number(device.deviceData[0].latitude): 38.2700 ,
longitude: Number(device.deviceData[0].longitude) > 0 ? Number(device.deviceData[0].longitude) : 100.8603,
...
const [viewport, setViewport] = useState => console.log(device.deviceData.length) ({
"latitude" in device.deviceData[0] {
latitude: Number(device.deviceData[0].latitude) > 0 ? Number(device.deviceData[0].latitude): 38.2700 ,
longitude: Number(device.deviceData[0].longitude) > 0 ? Number(device.deviceData[0].longitude) : 100.8603,
...
But all of the above have had errors with the formatting, so I am not sure if they are viable options that I have simply gotten the syntax wrong to.
Any advice is greatly appreciated
EDIT: Posted the content of device.deviceData
found under Redux Developer Tools
Upvotes: 0
Views: 304
Reputation: 342
Looking at error TypeError: Cannot read property 'latitude' of undefined
. My guess is value of device.deviceData
is undefined
.
So,Please do verify with console.log(device)
if deviceData field exists in device.
And, to fix above issue you can try
device.deviceData && device.deviceData.lenght>0 && device.deviceData[0].latitude
? Number(device.deviceData[0].latitude): 38.2700
Much more cleaner syntax with optional chaining would be:
Number(device?.deviceData?.[0]?.latitude || 38.2700)
Upvotes: 1