gpt4 book ai didi

javascript - 如何检测是否应该更新先前对象的属性?

转载 作者:行者123 更新时间:2023-12-03 00:33:44 24 4
gpt4 key购买 nike

首先,感谢您阅读我的问题并尽力帮助我,并对我的英语表示歉意。

我正在尝试使用 React 在 Redux 上创建一个方法来更改层的可见性。

我的问题是,更改可见性是完美的,但是当所有图层都不可见并尝试将它们更改为可见时,它们的 before 属性未定义,除了最后一个更改之外。

我将通过一个例子更好地解释我。

mapLayers 是一个包含 3 层的数组:

  • [2] Layer3
  • 1 Layer2
  • [0] Layer1

案例1:

如果我隐藏Layer1,他的前属性未定义,现在我显示Layer1,现在他的前属性是Layer2的id。

我的问题:

  • [2] Layer3
  • 1 Layer2
  • [0] Layer1

3 层不可见,因此:

  1. Layer2 更改为可见 -> before = undefined
  2. Layer3 更改为可见 -> before = undefined
  3. Layer1 更改为可见 -> before = Layer2 的 id

但是当将Layer3更改为可见时(在步骤2中),之前应该是未定义的,稍后,当改变Layer2的可见性时..在Layer3<之前 应该是 Layer2 id。

重要的是要知道我正在使用react-mapbox-gl,并且我需要在属性之前移动和隐藏/显示图层。

before: string 传递图层的id,会在id定义的图层之前显示当前图层。

https://github.com/alex3165/react-mapbox-gl/blob/master/docs/API.md

这是我的代码:

static changeLayerVisibility(layer) {
let mapLayers = [... AxisStore.getStore().getState().map.mapGLlayers];
const ids = mapLayers.map(l => l.id);
const index = ids.indexOf(layer.id);
const newVisibility = (layer.layout.visibility === 'visible') ? 'none' : 'visible';

let nextVisibleLayer = mapLayers.find((layerObj, idx) => idx > index && layerObj.layout.visibility === 'visible');

let updateLayout = Object.assign({}, mapLayers[index], {
layout: Object.assign({}, mapLayers[index].layout, { visibility: newVisibility }),
paint: Object.assign({}, mapLayers[index].paint),
before: newVisibility === 'visible' && nextVisibleLayer ? nextVisibleLayer.id: undefined
});

mapLayers.splice(index, 1, updateLayout);

return (dispatch) => {
dispatch({
type: MapTypeConstants.SET_MAP_LAYERS,
payload: mapLayers
});
};
}

最佳答案

实际上,我认为有更好的方法来设置属性。

<小时/>

首先,使用数组来存储可见性属性。如下所示,初始值应该为 false。

interface InVisiablityProps {
visible: Array<Boolean>
}

const initialState:InVisiablityProps = {
invisible: [false,false,false]
}

每次将 View 更改为不可见。将属性更改为!(属性)

关于javascript - 如何检测是否应该更新先前对象的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53743554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com