3

我想将数据发布到服务器.. 我的操作是这样的:

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 方法,第二种方法是在减速器中调度操作,最后一种方法是将我的操作中的所有数据作为参数传递。哪一个是正确的?我读了这个问题,我担心反模式。

4

2 回答 2

2

您应该考虑使用import { connect } from 'react-redux'和使用containers.

您在功能上访问您的商店mapStateToProps,您从容器中发送所有数据以执行您的操作。

它的签名是

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

在那里你得到了state可以传递给你的动作的部分。

该操作使用 ajax 与您从状态传递的数据执行发布到您的 api。

在您的操作中,您可以考虑使用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
于 2017-05-02T06:57:10.270 回答
0

我总是使用第三种方式,将数据传递给动作。数据可以是 store.getState() 中的数据,也可以是 params 中的数据,也可以是从服务器获取数据所需的任何数据。

于 2017-05-03T04:36:16.553 回答