Передача асинхронных данных (реквизитов) дочерним компонентам ? [Реагировать]

#reactjs #async-await #react-hooks #leaflet #geocoding

Вопрос:

Я стремлюсь создать маркер на карте (дочернем) компоненте leaflet после получения координат местоположения от моего родительского компонента, где я использовал автозаполнение react-places (включен API геокодирования, API JavaScript карт и API мест ). Проблема в том, что, поскольку координаты извлекаются с помощью асинхронной функции, если я передам координаты в качестве реквизитов, они изначально будут отображаться как пустые в моем дочернем компоненте. Я думаю, что решением будет эффект использования, но я просто не понимаю, как это сделать. Любая помощь была бы очень признательна. Прикрепление фрагментов кода, имеющих отношение к проблеме.

 //for autocomplete input search, defined inside Parent component
const [address, setAddress] = useState('')
const [coord, setCoord] = useState({
    lat: null,
    long: null
})
const handleSelect = async value => {
    const results = await geocodeByAddress(value)
    const latlng = await getLatLng(results[0])
    setAddress(value)
    setCoord(latlng)
}
 

Внутри return (), следующее для определения местоположения ввода пользователя :

 <div className='city'>
    Search a location<br />
    <PlacesAutocomplete value={address} onChange={setAddress} onSelect={handleSelect}>
                                {({ getInputProps, suggestions, getSuggestionItemProps, loading }) => (
                                    <div className='search-city'>
                                        <input {...getInputProps({ placeholder: "Type address" })} />

                                        <div className='options'>
                                            {loading ? <div>...loading</div> : null}
                                            {suggestions.map(suggestion => {
                                                const style = {
                                                    backgroundColor: suggestion.active ? '#d1d1d1' : 'white'
                                                }
                                                return (
                                                    <div {...getSuggestionItemProps(suggestion, { style })}>{suggestion.description}</div>
                                                )
                                            })}
                                        </div>
                                    </div>
                                )}
                            </PlacesAutocomplete>
                        </div>
 

А затем в ответ() снова я хочу передать «координацию» в качестве опоры. Если пользователь введет местоположение во ввод, я отобразю маркер на карте в своем компоненте. Если он этого не сделает, я не хочу отображать маркер, но я все равно хочу, чтобы компонент отображался со всеми остальными реквизитами

 <Map setData={setData} check={check} /> //haven't yet declared a coord prop
 

Биты кода :
введите описание изображения здесь

Комментарии:

1. Пожалуйста, опубликуйте код, а не его изображение.