Saya mencoba mengambil beberapa data dalam komponen reaksi menggunakan kait useEffect
. Setelah render awal, fetchItems()
mendapatkan item dan memperbarui toko. Namun, items
masih berupa objek kosong bahkan setelah toko diperbarui.
Saya mungkin salah menggunakan useEffects
. Bagaimana Anda menggunakan Redux dengan useEffects
? Saya ingin menyetel status pemuatan untuk komponen, tetapi karena komponen hanya mengirimkan tindakan untuk mengambil item (alih-alih memanggil API secara langsung), ia tidak mengetahui kapan data diambil dan penyimpanan diperbarui sehingga dapat menariknya. .
Dapatkah seseorang membantu mencari cara untuk memastikan bahwa objek items
diperbarui setelah pengambilan saga dan pembaruan toko berikutnya?
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
adalah pembuat tindakan yang membuat tindakan untuk dikirim.- Peredam dan saga saya berfungsi dengan baik karena saya dapat melihat tindakan penyimpanan dan pembaruan di konsol.
- Jika saya meneruskan objek
items
ke dalam array ketergantungan untukuseEffect
, maka akan ada loop tak terbatas dan halaman terus dirender ulang.
Peredam:
const itemReducer = (state={}, { type, payload }) => {
switch(type) {
case ITEM_GET_SUCCESS:
return {...state, ...payload}
default: return state
}
}
ambilItemActionCreator:
import { createAction } from '@reduxjs/toolkit';
export const fetchItemActionCreator = createAction(ITEM_GET_PENDING);
Terima kasih banyak sebelumnya!
item reducer
dan danfetchItemActionCreator
Anda - person Hend El-Sahli   schedule 12.11.2020const ItemComponent = ({ item , fetchItem}) => {
Apakah itu tidak disengaja? - person Hend El-Sahli   schedule 12.11.2020fetchItem
secara tidak sengaja tidak ditambahkan di sini dalam pertanyaan - person Bovojon A   schedule 13.11.2020