Я пытаюсь получить некоторые данные в компоненте реакции с помощью хука useEffect
. После первоначального рендеринга fetchItems()
получает элементы и обновляет магазин. Однако items
по-прежнему остается пустым объектом даже после обновления хранилища.
Я мог неправильно использовать useEffects
. Как вы используете Redux с useEffects
? Я хочу установить состояние загрузки для компонента, но поскольку компонент только отправляет действие для извлечения элементов (вместо прямого вызова API), он не знает, когда данные извлекаются, а хранилище обновляется, поэтому он может их вытащить .
Может кто-нибудь помочь выяснить, как убедиться, что объект items
обновляется после получения саги и последующего обновления магазина?
import React, { useState, useEffect } from "react";
import { connect } from 'react-redux';
import { useParams } from "react-router-dom";
const ItemComponent = ({ item, fetchItem }) => {
const { itemId } = useParams();
const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
setIsLoading(true)
fetchItem(itemId)
setIsLoading(false)
}, []);
console.log(item) // gives empty object even after the fetch and store update
}
const mapStateToProps = (state) => {
return {
item: state.item
}
}
const mapDispatchToProps = (dispatch) => {
return {
fetchItem: (itemId) => { dispatch(fetchItemActionCreator(itemId)) }
}
}
export default connect(mapStateToProps, mapDispatchToProps)(ItemComponent);
fetchItemActionCreator
- это создатель действия, который создает действие для отправки.- Мой редюсер и сага работают нормально, так как я могу видеть действия магазина и обновления в консоли.
- Если я передам объект
items
в массив зависимостей дляuseEffect
, будет бесконечный цикл, и страница продолжит повторный рендеринг.
Редуктор:
const itemReducer = (state={}, { type, payload }) => {
switch(type) {
case ITEM_GET_SUCCESS:
return {...state, ...payload}
default: return state
}
}
fetchItemActionCreator:
import { createAction } from '@reduxjs/toolkit';
export const fetchItemActionCreator = createAction(ITEM_GET_PENDING);
Заранее большое спасибо!
item reducer
и иfetchItemActionCreator
- person Hend El-Sahli   schedule 12.11.2020const ItemComponent = ({ item , fetchItem}) => {
Это случайно? - person Hend El-Sahli   schedule 12.11.2020fetchItem
был случайно не добавлен сюда в вопросе - person Bovojon A   schedule 13.11.2020