如何启动多个调度

时间:2018-12-17 09:29:37

标签: reactjs redux redux-thunk

首先,感谢您阅读我的问题,并尝试帮助我并为我的英语道歉。

我想在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;
}

0 个答案:

没有答案