Coding partly working.
I am trying to get records from Atlassian Instance via reactjs. With {codes ? JSON.stringify(codes) : 'Loading record'}
I can get the record as follows
[{"value":{"idx":"100","name":"php"},"key":"mykey"}]
Here is my issue: when I decide to map the record as per code below, I am seeing error in browser console
**TypeError: M is null
Qd App.js:**
{codes.map(code => (
<div>
<b>{code.value.idx}</b><br/>
<b>{code.value.name}</b><br/>
</div>
))}
{codes.length === 0 && <div>No Record Found</div>}
Here is the entire Code
App.js
import React, { useEffect, useState, Fragment } from "react";
function App() {
const [codes, setCodes] = useState(null);
useEffect(() => {
invoke('mymethod').then(setCodes);
}, []);
return (
<div>
<h2> Display Codes Data</h2>
{codes.map(code => (
<div>
<b>{code.value.idx}</b><br/>
<b>{code.value.name}</b><br/>
</div>
))}
{codes.length === 0 && <div>No Record Found</div>}
{codes ? JSON.stringify(codes) : 'Loading record'}
</div>
);
}
export default App;
index.js
import Resolver from '@forge/resolver';
import api, { route } from "@forge/api";
const resolver = new Resolver();
resolver.define('mymethod', async (req) => {
const res = await storage.query().where('key', startsWith('mykey')).limit(20).getMany();
console.log(res);
return res.results;
});
export const handler = resolver.getDefinitions();
const [codes, setCodes] = useState(null);
Here, codes
is initially null
so on first render codes.map()
and codes.length
will throw errors.
Try either initialising the state to an empty array...
const [code, setCodes] = useState([]);
OR
Safely call .map()
and .length
using optional-chaining
{codes?.map(code => (
<div key={code.key}>
<b>{code.value.idx}</b><br/>
<b>{code.value.name}</b><br/>
</div>
))}
{!codes?.length && <div>No Record Found</div>}
My preference is the first option as it means you don't have to worry about possible null
values anywhere.