【发布时间】:2020-02-08 20:15:40
【问题描述】:
我有一个名为“VendorResults”的通用组件。我将一个字符串 prop 传递给这些通用组件中的每一个,例如“Microsoft”、“Apple”等。
<ScrollView>
<SearchResults/>
<VendorResults vendor={"microsoft"}/>
<VendorResults vendor={"oracle"}/>
</ScrollView>
在这个通用组件中,我将 vendor prop 作为参数传递给我的 Redux-Thunk 操作:
componentDidMount() {
const {vendor} = this.props;
this.props.getVendorInformation(vendor);
}
API 调用开始,并且调度 Thunk 操作。数据最终会进入 Reducer 并存储。但是,当我有多个通用供应商组件时,无论哪个异步调用最后完成,似乎都优先于所有其他组件。例如,如果 oracle 最后完成加载,则 microsoft 组件的状态将更改并显示 oracle 数据。
操作
export function getVendorInformation(vendor) {
const url = `${VENDOR_URL}api/search/${vendor}`;
return dispatch => {
dispatch(getVendor());
fetch(url)
.then(blob => blob.json())
.then(data => {
dispatch(getVendorSuccess(data))
})
.catch(e => {
console.log(e);
dispatch(getVendorError(e.message))
});
};
减速器
export default function(state=initialState, action){
switch (action.type){
case FETCHING_VENDOR: return {payload:[], fetching: true}
case FETCH_VENDOR_SUCCESS: return {payload: action.payload.data}
case VENDOR_ERROR: return {payload:[], error: true, ...state}
}
return state;
}
我的问题:
我想保持这种通用/可重用供应商组件的模式 - 我不希望每个供应商都有一个新组件。动作/减速器也是如此;独特的供应商行动/减少者会变得混乱。
如何将单个 Redux 存储共享/拆分/分区为供应商特定的块,以保持状态分离,但仍然受益于一个流程。谢谢!!
【问题讨论】:
标签: reactjs react-native redux react-redux state