ReactJS Redux-Saga - TypeError: Невозможно прочитать свойство 'type' неопределенного значения - PullRequest
0 голосов
/ 18 июня 2020

У меня возникла эта проблема, и я понятия не имею, что происходит ...

«Ошибка типа: невозможно прочитать свойство 'type' неопределенного значения»

ОШИБКА ИЗОБРАЖЕНИЯ

Индекс. js Индекс. js

import { createStore, applyMiddleware } from 'redux';
import createSagaMiddleware from 'redux-saga';

import rootReducer from './modules/rootReducer';
import rootSaga from './modules/rootReducer';

const sagaMiddleware = createSagaMiddleware();

const store = createStore(
 rootReducer,
 applyMiddleware(sagaMiddleware)
);

sagaMiddleware.run(rootSaga);

export default store;

редуктор. js редуктор. js

import produce from 'immer';

export default function cart(state = [], action) {

switch (action) {

case 'ADD_SUCCESS':
  return produce(state, draftState => {
    const { product } = action;
    draftState.push(product)
  });

case 'REMOVE':
  return produce(state, draftState => {
    const productIndex = draftState.findIndex(product => product.id === action.id)

    if (productIndex >= 0) {
      draftState.splice(productIndex, 1);
    }
  });

case 'UPDATE_AMOUNT_SUCCESS':
  return produce(state, draftState => {
    const productIndex = draftState.findIndex(product => product.id === action.id)

    if (productIndex >= 0) {
      draftState[productIndex].amount = Number(action.amount);
    }
  });

default:
  return state;
  }

};

действия. js действия. js

export function addToCartRequest(id) {
   return {
type: 'ADD_REQUEST',
id
 };
};

export function addToCartSuccess(product) {
  return {
type: 'ADD_SUCCESS',
product
  };
};

export function removeFromCart(id) {
  return {
type: 'REMOVE',
id
  };
};

export function updateAmountRequest(id, amount) {
  return {
type: 'UPDATE_AMOUNT_REQUEST',
id,
amount
  };
};

export function updateAmountSuccess(id, amount) {
  return {
type: 'UPDATE_AMOUNT_SUCCESS',
id,
amount
  };
};

саги. js - часть 1 саги. js - часть 1

import { call, select, put, all, takeLatest } from 'redux-saga/effects';
import { toast } from 'react-toastify';

import api from '../../../services/api';
import history from '../../../services/history';
import { addToCartSuccess, updateAmountSuccess } from './actions';
import { formatPrice } from '../../../utils/format';

function* addToCart({ id }) {

  const productExists = yield select(
    state => state.cart.find(p => p.id === id),
  );

  const stock = yield call(api.get, `/stock/${id}`);

  const stockAmount = stock.data.amount;

  const currentAmount = productExists ? productExists.amount : 0;

  const amount = currentAmount + 1;

  if (amount > stockAmount) {
    toast.error('Out of stock!')
    return;
  }

  if (productExists) {

    yield put(updateAmountSuccess(id, amount))

  } else {
    const response = yield call(api.get, `/products/${id}`);

    const data = {
      ...response.data,
      amount: 1,
      priceFormatted: formatPrice(response.data.price),
    }

саги. js - часть 2 саги. js - часть 2

    yield put(addToCartSuccess(data));
    history.push('/cart');
  }

};

function* updateAmount({ id, amount }) {
  if (amount <= 0) return;

  const stock = yield call(api.get, `stock/${id}`);

  const stockAmount = stock.data.amount;

  if (amount > stockAmount) {
    toast.error('Out of stock!')
    return;
  }

  yield put(updateAmountSuccess(id, amount));
}

export default all([
  takeLatest('@cart/ADD_REQUEST', addToCart),
  takeLatest('@cart/UPDATE_AMOUNT_REQUEST', updateAmount)
]);

Ссылка на репозиторий: https://github.com/euguilhermegirardi/Knots-4-You

1 Ответ

0 голосов
/ 18 июня 2020

Исправлена ​​проблема!

Я удалил файл rootSagas и изменил последний код в sagas. js на:

Старый холод:

export default all([
  takeLatest('@cart/ADD_REQUEST', addToCart),
  takeLatest('@cart/UPDATE_AMOUNT_REQUEST', updateAmount)
]);

Новый:

export default function* watchAll() {
  yield all([
    takeLatest('ADD_REQUEST', addToCart),
    takeLatest('UPDATE_AMOUNT_REQUEST', updateAmount)
  ]);
}
...