57
задан 16 November 2018 в 10:05

2 ответа

До Реагируют, обеспечивает лучший путь, можно создать помощника, [112 лет]:

import { useEffect } from 'react';


export default function useEffectAsync(effect, inputs) {
    useEffect(() => {
        effect();
    }, inputs);
}

Теперь можно передать асинхронную функцию:

useEffectAsync(async () => {
    const items = await fetchSomeItems();
    console.log(items);
}, []);
25
ответ дан 1 November 2019 в 16:04

Я прочитал этот вопрос и чувствую, что лучший способ реализовать useEffect не упоминается в ответах. Скажем, Вы имеете сетевой вызов и хотели бы сделать что-то, после того как у Вас есть ответ. Ради простоты давайте сохраним сетевой ответ в переменной состояния. Можно было бы хотеть использовать действие/редуктор для обновления хранилища с сетевым ответом.

const [data, setData] = useState(null);

/* This would be called on initial page load */
useEffect(()=>{
    fetch(`https://www.reddit.com/r/${subreddit}.json`)
    .then(data => {
        setData(data);
    })
    .catch(err => {
        /* perform error handling if desired */
    });
}, [])

/* This would be called when store/state data is updated */
useEffect(()=>{
    if (data) {
        setPosts(data.children.map(it => {
            /* do what you want */
        }));
    }
}, [data]);

Ссылка => https://reactjs.org/docs/hooks-effect.html#tip-optimizing-performance-by-skipping-effects

4
ответ дан 1 November 2019 в 16:04

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

Похожие вопросы: