Как получить доступ к реквизиту из хука useEffect в Reactjs

Я извлекаю данные из новостного API и сохраняю их в своем состоянии после завершения, а затем также передаю значение состояния в качестве реквизита дочернему компоненту.

Данные, возвращаемые API, представляют собой массив объектов. Я хочу передать только один элемент (объект) этого массива (который сейчас находится в моем состоянии) моему дочернему компоненту. Итак, я сделал именно это, используя обычный метод обхода массивов ([]) для передачи одного элемента, но, к сожалению, когда я попытался использовать хук useEffect в моем дочернем компоненте для консоли, журналировать реквизиты (что сработало), я не смог получить доступ к свойствам моего элемента (объекта) ни из хука, ни из тела компонента, поскольку он продолжал говорить мне, что он не определен и что я должен отменить все подписки и асинхронные задачи в функции очистки useEffect. Итак, я попытался передать этот элемент в виде массива с помощью метода splice, чтобы его можно было пройти из дочернего компонента с помощью метода map (который сработал), однако я все еще не смог получить доступ к свойствам из хука useEffect.

Родительский компонент (Home.js)

 ...
const [data, setData]= useState([])
 useEffect(()=>{

        const fetch= async()=>{
            const response= await axios(url)
            const results= response.data
            setData(results.articles.slice(0,5))
        }
        fetch()

    },[url])

return(
    <>
    <Categories onClick = {fetchCategory}/>
    <section className = {classes.latest}>
    <Vertical postArray = {data.slice(0,1)} postObject = {data[0]}/>
    </section>
    </>
)
}

export default Home

Дочерний компонент (Vertical.js)

const Vertical=(props)=>{

useEffect(() => {
    // console.info('postArray',props.postArray.title)
    console.info('postObject',props.postObject.title)

}, )

return(
    <>
    {/* <article key = {props.postObject.content} className = {classes.article}>
        <figure className = {classes.article_figure}>
            <img src='' alt = "article alternative"/>
        </figure>
        <div className = {classes.article_details}>
            <h2>{props.postObject.title}</h2>
            <p>{props.postObject.description}</p>

        </div>
    </article> */}
    {props.postArray.map(post=>(
        <article key = {post.content} className = {classes.article}>
        <figure className = {classes.article_figure}>
            <img src='' alt = "article alternative"/>
        </figure>
        <div className = {classes.article_details}>
            <h2>{post.title}</h2>
            <p>{post.description}</p>

        </div>
    </article>
    ))}
    </>
)
}

export default Vertical

Причина этого в том, что мне нужно получить доступ к URL-адресу, который находится внутри переданного объекта, чтобы сделать другой для получения миниатюры для этого сообщения.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
12
0
21 874
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вам нужно дать зависимости для useEffect, чтобы он смотрел и консольил

useEffect(() => {
    // console.info('postArray',props.postArray.title)
    console.info('postObject',props.postObject.title)

},[props.postObject.title]) //this will ensure that this prop is watched for changes

Редактировать: для всех с неопределенными ошибками вы можете сделать следующее изменение в зависимости

useEffect(() => {
        // console.info('postArray',props.postArray.title)
        console.info('postObject',props?.postObject?.title) // optional-chaining would take care of the undefined check 
    
    },[props?.postObject?.title]) // optional-chaining would take care of the undefined check 

Хороший! это решает проблему с производительностью, но я все еще продолжаю получать неопределенность при попытке доступа к свойствам из хука, который есть.

mbappai 30.05.2019 08:04

где вы получаете undefined, вы получите undefined в первый раз, но в тот момент, когда данные возвращаются из API, вы больше не должны получать undefined]

Sujit.Warrier 30.05.2019 08:13

Я получаю неопределенность, когда пытаюсь получить доступ к любому свойству из хука useEffect, точно так же, как props.postObject.title.

mbappai 30.05.2019 08:15

О, теперь я понимаю немного больше. Возможно, мой запрос API не будет полностью разрешен к моменту отображения дочернего компонента на экране, верно?

mbappai 30.05.2019 08:17

Позвольте мне попробовать установить isLoading как мое состояние и передать его дочернему компоненту, который будет использоваться в качестве зависимости в хуке useEffect.

mbappai 30.05.2019 08:18

Да, все равно не повезло.

mbappai 30.05.2019 08:31

где эти данные? вам нужно установить результат в состояние

Sujit.Warrier 30.05.2019 08:37

в состояние дочернего компонента? Вместо этого я просто использовал его прямо из реквизита.

mbappai 30.05.2019 08:38

Извините, я не включил это в фрагмент кода. Позвольте мне сделать это прямо сейчас.

mbappai 30.05.2019 08:41

отлично сработало для меня, почему это еще не помечено как ответ

Chukwuemeka Maduekwe 05.05.2020 08:40

Другие вопросы по теме