Как настроить начальное состояние для response-redux из результатов API - PullRequest
0 голосов
/ 08 марта 2020

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

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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...