I try to fetch object vorlagen
with ID 6310
from this API and want to show if property vorlageAngenommen
is true or false.
The JSON object looks as follows:
My code that does not run, looks as follows (I am not sure if this is a good base at all):
import useSWR from "swr"; import "./styles.css"; const fetcher = (...args) => fetch(...args).then((res) => res.json()); const arrayFindObjectByProp = (arr, prop, val) => { return arr.find((obj) => obj[prop] == val); }; export default function App() { const { data, error } = useSWR( "https://www.bfs.admin.ch/bfsstatic/dam/assets/14856203/master", fetcher ); const specificVoting = null; console.log("swr error: ", error); console.log("swr data: ", data); return ( <div className="App"> <div style={{backgroundColor: "red"}}> {data ? ( {specificVoting = arrayFindObjectByProp(data.schweiz.vorlagen, vorlagenId, '6310')} <h4>{specificVoting.vorlageAngenommen}</h4> ) : ( <h1>loading...</h1> )} </div> </div> ); }
I created a sandbox as well that can be found here.
Any idea how I can fetch and present a specific element of an array where I know the ID?
Many thanks for your feedback in advance.
Advertisement
Answer
Your code has a few issues.
First: You should extract the value outside of the return statement
Second; You should pass on the property value as a string
to arrayFindObjectByProp
function
Lastly: Since the value returned is a boolean
, you need to convert it into a string to display in the component
export default function App() { const {data, error } = useSWR( "https://www.bfs.admin.ch/bfsstatic/dam/assets/14856203/master", fetcher ); console.log("swr error: ", error); console.log("swr data: ", data); const specificVoting = data && arrayFindObjectByProp(data.schweiz.vorlagen, "vorlagenId", "6310"); return ( <div className="App"> <div style={{ backgroundColor: "red" }}> {data ? ( <h4>{specificVoting.vorlageAngenommen.toString()}</h4> ) : ( <h1>loading...</h1> )} </div> </div> ); }