Получено NaN в редукторе в Redux / React Js - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь сделать задачу, при которой каждый клик будет «УВЕЛИЧЕНИЕ» + 1 номер товара в корзине. Но это не работает должным образом, и вместо этого я получил эту ошибку:

index. js: 1 Предупреждение: получено NaN для атрибута children. Если это ожидается, приведите значение к строке.

Мой код здесь

const initialState = {
    counter : 0,
    cartData : []   
};

function cartNumber(state = initialState, action) {
  switch(action.type){
    case "INCREMENT" :
      var index =  state.cartData.findIndex(el => el.name === action.newData.name);
      var cartNumber = Number(state.counter);
      if (index > -1) {
        return {
          ...state,
          cartData : state.cartData.map((el) => el.name === action.newData.name ? {...el, quantity : Number(el.quantity + 1), price : Number(el.price + el.total) } : el),
          counter : Number(state.cartData.map((el) => Number(el.quantity))) + 1 // NOTE : **I think this line is the error, but i dont know how to fix it**
        }
      } else {
        return {
          ...state, counter : Number(cartNumber + 1),
          cartData : state.cartData.concat(action.newData) 
        }
      }
    break;
    case "DECREMENT" :
      if (state.cartData.quantity < 1) {
        return {
          ...state, 
          cartData : state.cartData.map((el) =>
            el.name === action.decrementData ? {...el, quantity: el.quantity !== 1 ? el.quantity - 1 : 1, price : el.price !== el.total ? el.price - el.total : el.price } : el)
        }               
      } else {
        return {
          ...state, 
          cartData : state.cartData.filter(el => el.name !== action.decrementData ),
          counter : state.cartData.map((el) => el.name === action.decrementData ? state.counter - el.quantity : el)
        }
      }
    default: 
      return state; 
  }
  return state
}
export default cartNumber;

Я пытался исправить это, преобразовав все количество в число, но оно все еще не работает. Изначально это массив, потому что я взял из массива cartData, поэтому преобразовал его.

Ответы [ 2 ]

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

Возможно, вы здесь:

counter : Number(state.cartData.map((el) => Number(el.quantity))) + 1 // NOTE : 
**I think this line is the error, but i dont know how to fix it**

state.cartData.map((el) => Number(el.quantity)) возвращает массив. Number([]) равно 0, но Number([any_item]) вернет NaN

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

cartData.map вернет array, вы используете Number и передаете array in. Он вернет NaN

...