Quantcast
Channel: Recent Questions - Stack Overflow
Viewing all articles
Browse latest Browse all 18065

Property not passed correctly onto sub component

$
0
0

I have a simple site which loads property-related data from a Danish national data provider, SDFI.I am having issues passing down the right values from a mother component to a sub component.

My code looks like this:

My main component:

Search.js:

import { Container } from "react-bootstrap";import { useState } from "react"; import { AsyncTypeahead } from "react-bootstrap-typeahead";import ResultsDisplay from './ResultsDisplay';const SEARCH_URI = "https://api.dataforsyningen.dk/autocomplete";const AsyncSearch = () => {    const [isLoading, setIsLoading] = useState(false);    const [options, setOptions] = useState([]);    const [found, setFound] = useState(false);    const [hest, setHest] = useState([])    const [grund, setGrund] = useState(0)    const handleSearch = async (query) => {        setIsLoading(true);            const response = await fetch(`${SEARCH_URI}?q=${query}&type=adresse`);        const addresses = await response.json();        setOptions(addresses);        console.log(addresses);        setIsLoading(false);    };    const handleChange = async (selected) => {       if (selected === undefined || selected.length == 0 )      return;      const s = selected[0]       const aga = s.data.adgangsadresseid;      // console.log(`1. id = ${s.data.id}`)      // console.log(`2. id = ${s.data.adgangsadresseid}`)      // console.log(`id is ${selected[0].data.adgangsadresseid}`);      let res;      if (s.data.adgangsadresseid === undefined)      {        res = await fetch(`/bolig/${selected[0].data.id}`);        } else {         res = await fetch(`/bolig/${selected[0].data.adgangsadresseid}`);      }       let searchResults = await res.json();      setHest(searchResults);      console.log(hest);       setFound(true);      // Fetch boliggrundareal        const jordstykkeId = searchResults[0].jordstykke;      const matRes = await fetch(`/grundareal/${jordstykkeId}`);      const grund = await matRes.json();      setGrund(grund.grundareal);    }  // Bypass client- side filtering by returning `true`. Results are already  // filtered by the search endpoint, so no to do>it again.  const filterBy = () => true;   return (<>      <AsyncTypeahead        filterBy={filterBy}        id="async-load"        isLoading={isLoading}        labelKey="forslagstekst"        onChange={handleChange}        minLength={3}        onSearch={handleSearch}        options={options}        placeholder="Indtast adresse"        renderMenuItemChildren={(opt) => (<><span>{opt.tekst}</span></>        )}        />            {hest.length > 0 && <ResultsDisplay             grund={grund}            hest={hest}             />        }</>    );}export default AsyncSearch;

Child component (ResultsDisplay.js)

import { useState } from "react"import { Container } from 'react-bootstrap'; const ResultsDisplay = (hest, grund) => {     console.log(`grund = ${grund}`)    return(<><Container><h2>Grund</h2><p>{grund.grundareal}</p></Container>            {hest.hest.map((h, i) => {                return (<Container><h2>Bygning</h2>                    // ------ <snip> -----</Container>);            })}</>    );}    export default ResultsDisplay;

In the above example, the value of "grund" is never passed correctly from AsyncSearch to ResultsDisplay. If I debug the value of grund.grundareal inside AsyncSearch the value is correct (i.e. it's an object with the property grundareal = some integer). However, after passing "grund" to ResultsDisplay, it shows up simply as an empty object.What am I doing wrong? Could this be related to how the "grund" object is passed over to ResultsDisplay?


Viewing all articles
Browse latest Browse all 18065

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>