从API wtih Redux获取数据
最近我一直在研究react和redux。我阅读了官方文档,并尝试了一些待办事项列表教程。第1部分是关于react的,第2部分是关于redux的: 所以基本上他只是建立了一个商店,并在最初添加了一些待办事项的数组。现在,我不希望我的数据是本地的,我希望从API获取它。我很难理解这到底是怎么回事。因此,我将在action_creators.js中使用的代码是:从API wtih Redux获取数据,redux,immutable.js,react-redux,Redux,Immutable.js,React Redux,最近我一直在研究react和redux。我阅读了官方文档,并尝试了一些待办事项列表教程。第1部分是关于react的,第2部分是关于redux的: 所以基本上他只是建立了一个商店,并在最初添加了一些待办事项的数组。现在,我不希望我的数据是本地的,我希望从API获取它。我很难理解这到底是怎么回事。因此,我将在action_creators.js中使用的代码是: export function fetchData() { return dispatch => { fet
export function fetchData() {
return dispatch => {
fetch('http://127.0.0.1:8000/example')
.then(res => res.json())
.then(res => dispatch({
type: FETCH_DATA,
data: res
}))
}
}
现在,在示例代码中,例如添加“todo”:
export function addItem(text) {
return {
type: 'ADD_ITEM',
text
}
}
你没有分派任何东西,教程在减速机中这样做?但是,当您返回并发送回执时,是否会自动将其发送到您的商店
如果是这样的话,我就不知道我应该在减速机上写些什么。。
这是我添加“待办事项”的代码:
import {Map} from 'immutable';
function setState(state, newState) {
return state.merge(newState);
}
function fetchData(state) {
return state;
}
function addItem(state, text) {
const itemId = state.get('hostnames').reduce((maxId, item) => Math.max(maxId,item.get('id')), 0) + 1;
const newItem = Map({id: itemId, text: text, status: 'active'});
return state.update('hostnames', (hostnames) => hostnames.push(newItem));
}
export default function(state = Map(), action) {
switch (action.type) {
case 'SET_STATE':
return setState(state, action.state);
case 'ADD_ITEM':
return addItem(state, action.text);
case 'FETCH_DATA':
return fetchData(state);
}
return state;
}
因此,基本上我的问题是,如何获取数据(如果现在获取错误),以及如何将从api获取的数据添加到reducer中的存储中
我只是觉得react和redux非常复杂,如果我问了一个非常愚蠢的问题,或者只是在我想做的事情上犯了很大的错误,我很抱歉
提前感谢您的帮助。事实上,您所有的减速机都应该非常简单和纯净(没有任何副作用)。因此,他们唯一关心的是修改状态,而不是其他。从服务器获取数据或任何种类的编排都应该在redux中间件中实现。看看或者如果你需要更复杂的东西。希望有帮助。事实上,你所有的减速机都应该是相当愚蠢和纯净的(没有任何副作用)。因此,他们唯一关心的是修改状态,而不是其他。从服务器获取数据或任何种类的编排都应该在redux中间件中实现。看看或者如果你需要更复杂的东西。希望有帮助。想象一下你的json
{
"data": {
"apple": 1,
"banana": 3,
},
"status": 200,
}
你的行为
export function fetchData() {
return dispatch => {
fetch('http://127.0.0.1:8000/example')
.then(res => res.json())
.then((responseData) => {
if(responseData.status === 200){
dispatch(setData(responseData));
}
})
}
}
export function setData(responseData) {
return {type: SET_DATA, data: responseData.data }
}
你的减速机
const initialState = { data: null };
export default function(state = initialState, action) {
switch (action.type) {
case 'SET_DATA':
return Object.assign({}, state, {
data: action.data,
})
default:
return state;
}
}
那么你的州就会变成
{ data: {
apple: 1,
banana: 3,
}
}
想象一下你的json
{
"data": {
"apple": 1,
"banana": 3,
},
"status": 200,
}
你的行为
export function fetchData() {
return dispatch => {
fetch('http://127.0.0.1:8000/example')
.then(res => res.json())
.then((responseData) => {
if(responseData.status === 200){
dispatch(setData(responseData));
}
})
}
}
export function setData(responseData) {
return {type: SET_DATA, data: responseData.data }
}
你的减速机
const initialState = { data: null };
export default function(state = initialState, action) {
switch (action.type) {
case 'SET_DATA':
return Object.assign({}, state, {
data: action.data,
})
default:
return state;
}
}
那么你的州就会变成
{ data: {
apple: 1,
banana: 3,
}
}
好吧,答案并不是我想要的,但调查这些问题对我有点帮助。我刚才复制的代码有点错误,因为该操作现在返回一个函数,如果您想进行异步调用,该函数非常有用。目前我对它不太感兴趣,所以我应该做一次退货而不是退货派送。好的,答案不是我真正想要的,但是调查他们对我有点帮助。我刚才复制的代码有点错误,因为该操作现在返回一个函数,如果您想进行异步调用,该函数非常有用。目前我对它不太感兴趣,所以我应该做退货而不是退货。