在 Redux 中,将 post 数据发送到服务器的最佳方式是什么?
In Redux, what is the best way to post data to a server?
我想post数据到服务器..我的操作是这样的:
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 方法,第二种方式是在 reducer 中调度操作,最后一种方式是将我的操作中的所有数据作为参数传递。哪一个是正确的?我阅读 this question 并且担心反模式。
您应该考虑使用 import { connect } from 'react-redux'
并使用 containers
。
您在函数 mapStateToProps
上访问您的商店,您从容器中发送您的所有操作数据。
它的签名是
const mapStateToProps = (state, ownProps) => {}
你得到了 state
可以传递给你的动作的部分。
使用 ajax 和您从州传递的数据对您的 api 执行 post 操作。
在您的操作中,您可以考虑使用 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() 中的数据,也可以是参数中的数据,也可以是您需要从服务器获取数据的任何数据。
我想post数据到服务器..我的操作是这样的:
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 方法,第二种方式是在 reducer 中调度操作,最后一种方式是将我的操作中的所有数据作为参数传递。哪一个是正确的?我阅读 this question 并且担心反模式。
您应该考虑使用 import { connect } from 'react-redux'
并使用 containers
。
您在函数 mapStateToProps
上访问您的商店,您从容器中发送您的所有操作数据。
它的签名是
const mapStateToProps = (state, ownProps) => {}
你得到了 state
可以传递给你的动作的部分。
使用 ajax 和您从州传递的数据对您的 api 执行 post 操作。
在您的操作中,您可以考虑使用 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() 中的数据,也可以是参数中的数据,也可以是您需要从服务器获取数据的任何数据。