首先,感谢您阅读我的问题,并尝试帮助我并为我的英语道歉。
我想在redux上启动多个调度。 我正在使用redux和redux-thunk。
我有一个名为deleteLayer的方法,我想先启动deleteLayerFromMapBox,完成后再启动下一个调度,该调用方法称为deleteFromRedux。
这是我的代码:
static deleteLayer(layer) {
return (dispatch) => {
dispatch(this.deleteLayerFromMapBox(layer));
dispatch(this.deleteFromRedux(layer));
}
}
static deleteLayerFromMapBox(layer) {
const mapLayers = [... AxisStore.getStore().getState().map.mapGLlayers];
const ids = mapLayers.map(l => l.id);
const index = ids.indexOf(layer.id);
mapLayers[index].redraw = false;
return {
type: MapTypeConstants.SET_MAP_LAYERS,
payload: mapLayers
};
}
static deleteFromRedux(layer) {
const mapLayers = [... AxisStore.getStore().getState().map.mapGLlayers];
const ids = mapLayers.map(l => l.id);
const index = ids.indexOf(layer.id);
mapLayers.splice(index, 1);
return (dispatch) => {
dispatch({
type: MapTypeConstants.SET_MAP_LAYERS,
payload: mapLayers
});
};
}
问题:
问题在于,首先我必须将属性redraw更改为false,以将其从显示在导航器所有图层上的MapComponent中删除。然后使用剪接将其从redux数组中删除。 如果同时使用两种方法,则会崩溃。
所以我想知道两个使deleteLayerFromMapbox完成时调用下一个方法deleteFromRedux的方法。
{this.props.mapGLlayers &&
this.props.mapGLlayers.map((l, index) => {
return (
<div key={index}>
{l.name && <Source id={"sourceId_" + l.id} tileJsonSource={l.source} />}
{l.redraw && l.redraw === true &&
<Layer type={l.type} id={l.id} sourceId={l.name ? "sourceId_" + l.id : l['source'] ? l['source'] : undefined}
sourceLayer={l['source-layer'] ? l['source-layer'] : undefined}
filter={l.filter ? l.filter : undefined}
paint={l.paint ? l.paint : undefined}
layout={l.layout ? l.layout : undefined}
before={l.before ? l.before : undefined}
/>}
</div>
);
})
}
减少我的减速器
export default function MapReducer(state = initialStateApp, action) {
switch (action.type) {
case MapTypeConstants.SET_MAP_LAYERS: {
return Object.assign({}, state, {
mapGLlayers: action.payload
});
}
default:
return state;
}