В Redux, как лучше всего отправить данные на сервер?

Я хочу опубликовать данные на сервере.. мои действия таковы:

export function addNewTodo(text) {
  return {
    type: 'ADD_NEW_TODO',
    payload: addNewTodoApi(text)
  };
}

let addNewTodoApi = function(text) {
  return new Promise(function(resolve, reject) {
    //implement fake method for get data from server
    setTimeout(function () {
      resolve({
        text:     text,
        done:     ??,
        assignTo: ??,
        Project:  ??,
        Category: ??,
        id:       ??
      });
    }, 10);
  });
};

У меня есть три пути. Первый способ - импорт хранилища и вызов метода getState в моем действии, а второй - диспетчеризация в редукторе, а последний - передача всех данных в моем действии в качестве аргумента. Который правильный? Я прочитал этот вопрос, и я беспокоюсь об антипаттернах.

2 ответа

Решение

Вы должны рассмотреть возможность использования import { connect } from 'react-redux' и используя containers,

Вы входите в свой магазин по функции mapStateToPropsВы отправляете все свои данные для вашего действия из контейнера.

Подпись для него

const mapStateToProps = (state, ownProps) => {}

Там вы получите state какая часть может быть передана вашему действию.

Действие выполнить публикацию в вашем API, используя ajax с данными, которые вы передали из штата.

В вашем действии вы могли бы рассмотреть возможность использования isomorphic-fetch,

Быстрый пример:

import 'isomorphic-fetch'

const postData = ()=> ({
  type: types.POST_YOURACTION,
  payload: new Promise((resolve, reject) => {
    fetch(api.postData(), {method: 'POST', }).then(response => {
      resolve(response.json())
    })
  })
})

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

Пример того, как получить доступ к вашему магазину.

import store from 'app/store'
store.getState().yourReducer.data

Я всегда пользуюсь третьим способом, передаю данные в действие. Данные могут быть данными в store.getState() или из params или что угодно, что вам нужно для получения данных с сервера.

Другие вопросы по тегам