Я пишу это приложение, которое проверяет текущие продукты на основе пользователя, который вошел в систему. Я написал избыточное действие, которое проверяет текущие продукты для этого пользователя, но я не знаю, как его реализовать. Может ли кто-нибудь мне помочь?
PS Если я отправлю действие, чтобы проверить, есть ли текущий продукт внутри компонента, который смонтировал метод жизненного цикла, тогда реакция создает бесконечное l oop, и я хочу только проверить продукты, если пользователь вошел в систему, потому что в противном случае я не могу получить ни одного продукта. Вот код моего редукционного действия, которое проверяет наличие новых продуктов пользователя:
import { CHECK_PRODUCTS_STARTED, CHECK_PRODUCTS_SUCCESS, CHECK_PRODUCTS_FAILURE } from './types'
const getProducts = () => {
return async (dispatch, getState) => {
dispatch(checkProductsStarted())
let config = {
method: 'POST',
headers: { 'Content-Type':'application/x-www-form-urlencoded' },
body: `token=${getState().auth.token}`
}
// Get database products
const { products: dbProducts } = await fetch('http://localhost:9000/api/getProducts', config)
.then(async res => await res.json())
.catch(err => {
dispatch(checkProductsFailure({error: typeof(err) === "string" || err ? err.toString() : "Error"}))
})
// Get current products in state
const { products: stateProducts } = getState().products
// Only add products that arent already in the state:
const unqiueProducts = dbProducts.filter(product => stateProducts.includes(product))
// Add them to payload
dispatch(checkProductsSuccess(unqiueProducts))
}
}
const checkProductsStarted = () => {
return {
type: CHECK_PRODUCTS_STARTED
}
}
const checkProductsSuccess = (products) => {
return {
type: CHECK_PRODUCTS_SUCCESS,
payload: {
products
}
}
}
const checkProductsFailure = (err) => {
return {
type: CHECK_PRODUCTS_FAILURE,
payload: {
...err
}
}
}
export default getProducts