需要学习资源,请点击开挂教学楼
需要学习资源,请点击开挂教学楼
我有点新的反应,redux和sagas,但我掌握了一切。
我有一个component(Results.jsx
)通过一个调用外部API的传奇来显示特定真实世界事件的结果:
-
componentDidMount() {
-
if (this.props.thing_id) {
-
this.props.getResults(this.props.thing_id);
-
}
-
}
...
-
const mapStateToProps = (state) => {
-
return {
-
prop1: state.apiReducer.thing_results.data1,
-
prop2: state.apiReducer.thing_results.data2,
-
fetching: state.apiReducer.fetching,
-
error: state.apiReducer.error,
-
};
-
};
-
const mapDispatchToProps = (dispatch) => {
-
return {
-
getResults: (thing_id) => dispatch({type: "RESULTS_DATA_REFRESH", payload: thing_id})
-
};
-
};
一切都很好。直到......好吧,我正在使用一个标签式界面,让我动态添加一堆额外的实例, Results.jsx
这样我就可以在同一个屏幕上看到一堆不同的结果集。
问题是当Results.jsx
组件的新实例 加载并从RESULTS_DATA_REFRESH
分派中 获取数据 时, 组件的所有实例 Results.jsx
都会使用返回的数据进行更新。它们 显示相同的数据。
对于我的生活,我无法弄清楚如何让一个组件的特定实例听取它自己调度的结果。我以为这是传奇的工作方式?
任何帮助表示赞赏!
-
const initialState = {
-
fetching: false,
-
error: null,
-
thing_results: {
-
data1: null,
-
data2: null,
-
},
-
};
-
export default (state = initialState, action) => {
-
switch (action.type) {
-
//...
-
case "RESULTS_DATA_REFRESH":
-
return {...state, fetching: true};
-
case "RESULTS_DATA_SUCCESS":
-
return {...state, fetching: false, thing_results: action.results.data, error: null};
-
case "RESULTS_DATA_FAILURE":
-
return {...state, fetching: false, thing_results: null, error: action.error};
-
default:
-
return state;
-
}
-
};