React / Redux - сохранение элемента в состоянии и отправка его в базу данных - PullRequest
0 голосов
/ 27 августа 2018

Я создаю приложение, и частью этого приложения является то, что оно позволяет людям добавлять в избранное определенные элементы. Они просто щелкают значок сердца SVG, и он становится красным, и он сохраняется в «избранном» в состоянии и он отправляется в базу данных (MySQL). Если они снова щелкают по значку, он становится серым, удаляет его из состояния и запускает другую выборку в базу данных, чтобы удалить этот элемент.

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

export const toggleFavorite = name => (dispatch, getState) => {
  const { searchResults, favorites } = getState()
  const currentSelection = filter(
    selection => selection.name === name,
    searchResults
  )
  const newFavorite = contains(currentSelection, favorites)
    ? reject(equals(currentSelection), favorites)
    : append(currentSelection, favorites)
  dispatch({
    type: SET_FAVORITE,
    payload: newFavorite
  })
}

Итак, мой вопрос таков: где и как я могу поместить свои выборки в бэкэнд, чтобы разрешить вставку и удаление? Это была моя последняя неудачная попытка:

export const toggleFavorite = name => async (dispatch, getState) => {
  const { searchResults, favorites } = getState()
  const currentSelection = filter(
    selection => selection.name === name,
    searchResults
  )
  const newFavorite = contains(currentSelection, favorites)
    ? reject(equals(currentSelection), favorites)
      await fetch(`http://localhost:5000/deletefavorite?user_id=1&selection_id=${currentSelection}`)
    : append(currentSelection, favorites)
      await fetch(`http://localhost:5000/addfavorite?user_id=1&selection_id=${currentSelection}`)

  dispatch({
    type: SET_FAVORITE,
    payload: newFavorite
  })
}

Заранее спасибо!

1 Ответ

0 голосов
/ 27 августа 2018

Вы должны заменить троичное условие классическим if / else:

if (contains(currentSelection, favorites)) {
    const newFavorite = reject(equals(currentSelection), favorites);
    await fetch(`http://localhost:5000/deletefavorite?user_id=1&selection_id=${currentSelection}`);
    dispatch({
        type: SET_FAVORITE,
        payload: newFavorite
    });
} else {
    const newFavorite = append(currentSelection, favorites)
    await fetch(`http://localhost:5000/addfavorite?user_id=1&selection_id=${currentSelection}`);
    dispatch({
        type: SET_FAVORITE,
        payload: newFavorite
    });
}
...