Redux + React Native Добавить товар в корзину не работает - PullRequest
0 голосов
/ 09 ноября 2019

Я новичок, чтобы реагировать нативно, и я пытаюсь реализовать функцию добавления в корзину с использованием приставки. Это работает, когда весь продукт попадает в корзину, но это не то, что я ищу, потому что мне нужно добавить количествои текст ввода с каждым продуктом, который выбрал пользователь (чтобы дать пользователю возможность заполнить их перед оформлением заказа). Это основной код (работает нормально при передаче всего продукта)

const initialState = {
    cart: [],
    total: 0,
}
...
case ADD_TO_CART:
 return {
   ...state,
   cart: [action.payload, ...state.cart],
   total: state.total + action.payload.price
 }
...

Это то, что я сейчас пытаюсь

const initialState = {
    cart: [],
    addCart: {
      meal_id: '',
      name: '',
      price: '',
      quantity: 1,
      meal_details: ''
    },
    total: 0,
}
case ADD_TO_CART:
  return {
    ...state,
    addCart: {
     meal_id: action.payload.id,
     name: action.payload.name,
     price: action.payload.price,
     quantity: 1,
     meal_details: ''
    },
    cart: [this.addCart, ...state.cart],
    total: state.total + action.payload.price
 }

Но это дает ошибки, this.addCart добавить неопределенноек массиву корзины я попробовал addCart return не может найти переменную addCart, и я использую state.addCart он добавляет первый элемент как нулевое значение, и всякий раз, когда я нажимаю на другой продукт, чтобы добавить его, добавляется последний нажатый

1 Ответ

1 голос
/ 09 ноября 2019

При доступе к состоянию Redux this отсутствует. Кроме того, вы не можете получить доступ к свойствам объекта, так как пытаетесь изменить объект, что также является причиной того, почему ваш основной код работает, а второй фрагмент - нет. Самым простым решением для исправления вашего кода будет удаление addCart из вашего состояния, поскольку данные эквивалентны вашему action.payload, а затем создание объекта addCart отдельно в редукторе.

const initialState = {
    cart: [],
    total: 0,
}

case ADD_TO_CART:
  let addCart = {
     meal_id: action.payload.id,
     name: action.payload.name,
     price: action.payload.price,
     quantity: 1,
     meal_details: ''
  }
  return {
    ...state,
    cart: [addCart, ...state.cart],
    total: state.total + action.payload.price
 }
...