【发布时间】:2017-03-26 14:25:24
【问题描述】:
我正在玩 react、redux、react-redux 和 redux-sagas。我有一个组件,一旦挂载就会执行 API 调用,当调用执行时,应该在组件中添加数据。
如果我理解正确,
-
mapDispatchToProps用于在组件内注入dispatch函数 -
mapStateToProps用于在 react 的 store 发生变化时更新组件 -
sagas用于在向 redux 发送消息时触发异步功能 -
reducers用于在向 redux 发送消息时更改 react 的 store
但是,在我的项目中,当组件挂载时,触发了API调用,改变了store,但是没有调用mapStateToProps,所以我的组件没有显示结果。
我不知道如何调试。
我错过了什么吗?
sagas/index.js
function* loadLinks(action) {
try {
const links = yield call(linksSearch, action.value);
yield put({type: "LINKS_LOAD_SUCCEEDED", links: links, page: action.value.page});
} catch (e) {
yield put({type: "LINKS_LOAD_FAILED", message: {}});
}
}
function* mySaga() {
yield [
takeEvery("LINKS_LOAD_REQUESTED", loadLinks)
]
}
export default mySaga;
reducers/index.js
const addLinks = (links, page, state) => {
const newLinks = [page].reduce((init, page) => {
init[page]=links;
return init;
}, state);
return Object.assign(newLinks)
};
const requestedLinks = (state = {}, action) => {
switch (action.type) {
case 'LINKS_LOAD_SUCCEEDED':
const newState = addLinks(action.links, action.page, state);
return newState;
default:
return state;
}
};
const reducer = combineReducers({
requestedLinks,
});
export default reducer
containers/ConnectedLinksGrid.js
const mapStateToProps = (state, ownProps) => {
return {
links:
(ownProps.page in state.requestedLinks) ?
state.requestedLinks[ownProps.page] :
[]
}
};
const mapDispatchToProps = (dispatch, ownProps) => {
return {
loadLinks: () => {
const value = ownProps;
dispatch({type: "LINKS_LOAD_REQUESTED", value})
}
}
};
const ConnectedLinksGrid = connect(
mapStateToProps,
mapDispatchToProps
)(LinksGrid);
export default ConnectedLinksGrid;
注意:<LinksGrid /> 在挂载后调用 loadLinks()。
【问题讨论】:
标签: javascript reactjs redux redux-saga