Javascript Redux saga正在获取数据,但没有更新状态
我在redux saga中使用axios来获取一些数据。我在每个步骤中都执行了Javascript Redux saga正在获取数据,但没有更新状态,javascript,reactjs,redux,redux-saga,Javascript,Reactjs,Redux,Redux Saga,我在redux saga中使用axios来获取一些数据。我在每个步骤中都执行了console.log(),以查看每个步骤的结果。即使我能够成功地在控制台上打印所有获取的数据,唯一的问题是它没有更新状态,因为屏幕输出为空,并且在DevTools中我看到状态为空 我的行动: 我的减速机: 我的传奇: 最后,我的组件: 从“React”导入React; 从'react redux'导入{connect}; 从“../actions/index”导入{listSearchBrewery}; 康斯特啤酒厂
console.log()
,以查看每个步骤的结果。即使我能够成功地在控制台上打印所有获取的数据,唯一的问题是它没有更新状态,因为屏幕输出为空,并且在DevTools中我看到状态为空
我的行动:
我的减速机:
我的传奇:
最后,我的组件:
从“React”导入React;
从'react redux'导入{connect};
从“../actions/index”导入{listSearchBrewery};
康斯特啤酒厂=(道具)=>{
const{brewery,getBreweryList}=props;
返回(
酿酒厂
{brewery.map((项目)=>(
{item.city}中的{item.name}
))}
);
}
常量mapStateToProps=状态=>{
返回{
酿酒厂:州立啤酒厂,
//错误:state.error
}
}
const mapDispatchToProps=调度=>({
getBreweryList:()=>dispatch(listSearchBrewery()),
});
导出默认连接(mapStateToProps、mapDispatchToProps)(ListBrewery);
在DevTools中,我可以看到SET\u LIST\u BREWERY\u SUCCESS
action正在通过saga进行调度,并正在获取所有数据:
但状态是空的:
我不明白哪里出了错
类型的值是多少。listSetBrewerySuccess
?事情看起来不错。如果您将代码放入codesanbox,则很容易找出问题所在。@rayhatfield这是完整的数组响应。您的reducer正在查找具有type:types.ListSetBrewerySucture的操作。“完整数组响应”是没有意义的。需要更改什么?这令人困惑。比如说,对于每一个ID,我都要获取姓名、城市、州。?
export const listSearchBrewery = ( ) => { // gets workerSaga to fetch the data
return {
type: LIST_SEARCH_BREWERY_REQUEST,
};
};
export const listSetBrewerySuccess = ( breweries ) =>{ // updates the store and also for display
return {
type: SET_LIST_BREWERY_SUCCESS,
breweries
};
};
const initialState = {
breweries: [],
}
const ListBreweryReducer = ( state = initialState, action) => {
switch(action.type) {
case types.listSearchBrewery:
return { ...state };
case types.listSetBrewerySuccess:
return { ...state, breweries: action.breweries };
default:
return state;
}
}
export function* watcherSaga() {
yield takeLatest("LIST_SEARCH_BREWERY_REQUEST", workerSaga);
}
function fetchBreweryList() {
return axios({
method: 'get',
url: 'https://api.openbrewerydb.org/breweries'
});
}
function* workerSaga() {
try{
console.log("Entered worker saga.");
const response = yield call(fetchBreweryList);
const breweries = response.data;
console.log("worker-saga executed.");
yield put({ type: "SET_LIST_BREWERY_SUCCESS", breweries });
console.log("store set");
console.log(breweries[0]); // successfully printing on the console
}
catch (error) {
yield put({ type: "SET_BREWERY_ERROR", error });
}
}
import React from 'react';
import { connect } from 'react-redux';
import { listSearchBrewery } from '../actions/index';
const ListBrewery = ( props ) => {
const { brewery, getBreweryList} = props;
return (
<div className="Container">
<button className="button" onClick={getBreweryList}>Brewerries</button>
<div className="list">
{brewery.map((item) => (
<div key={item.id}>
<p>{item.name} in {item.city}</p>
</div>
))}
</div>
</div>
);
}
const mapStateToProps = state => {
return {
brewery: state.breweries,
//error: state.error
}
}
const mapDispatchToProps = dispatch => ({
getBreweryList: () => dispatch(listSearchBrewery()),
});
export default connect(mapStateToProps, mapDispatchToProps)(ListBrewery);