Почему мне нужно добавить диспетчеризацию в массиве useEffect? - PullRequest
0 голосов
/ 24 июня 2019

Я прочитал документацию, но она мне не была понятна. Это может быть из-за того, что я не могу полностью читать по-английски и использую онлайн-переводчик, а что-то упущено.

Как правило, я хочу отправить действие, когда Сообщений компонент отображается:

useEffect(
    () => {
        dispatch(postsFetchRequested());
    }, [dispatch]
)

отправка объявлена ​​выше useEffect ("const dispatch = useDispatch()")

Я пытался использовать диспетчеризацию внутри эффекта несколько раз, и всегда было предупреждение, но единственный способ, которым он работал, - это поместить функцию диспетчера в массив.

Я прочитал документ, как я сказал, но это не было ясно КАК ЭТО РАБОТАЕТ и ПОЧЕМУ Я ДОЛЖЕН ЭТО СДЕЛАТЬ.

Спасибо, если какая-нибудь добрая душа может объяснить, и я непременно отмечу ответ как правильный.

РЕДАКТИРОВАТЬ: я немного понял о данных, используя такие вещи, как useState и пропуская пустой массив, так как начальное состояние в useState также было пустым массивом. Но я не понимаю, как это работает с этими диспетчерскими функциями.

1 Ответ

0 голосов
/ 24 июня 2019

Второй аргумент useEffect указывает ловушке, когда вызывать первый аргумент.Передача dispatch в качестве второго аргумента указывает useEffect на вызов первого аргумента при монтировании компонента, а затем только снова при изменении dispatch.

Кроме того, dispatch должно быть объявлено вне useEffect.

const dispatch = useDispatch();

useEffect(
    () => { dispatch({ type: 'FETCH_THINGS' }) },
    [dispatch]
);

Чтобы ваш эффект назывался only , когда компонент монтируется, вы должны передатьпустой массив в качестве второго аргумента.См. документацию для более подробного объяснения.

useEffect(
    () => { /* do something */ },
    []
);
...