javascript - 更新目标组件中的全局状态,而不重新渲染共享全局状态的组件
问题描述
我试图通过跟踪全局 z-index 来增加组件 onClick 的 z-index,只要单击共享全局 z-index 状态的组件之一,它就会增加。这本质上是为了确保单击的任何组件都具有最高的 z-index。
但是,我无法弄清楚如何防止所有组件更新 z-index,因为它们都通过 props 订阅了此状态。我将 Redux 和 mapStateToProps 与 mapDispatchToProps 一起用于点击处理程序。
我试过这样的减速器:
case "INC_Z_COMP1":
return {
...state,
zGlobal: ++state.zIndex.global,
zComponent1: state.zIndex.global,
}
case "INC_Z_COMP2":
return {
...state,
zGlobal: ++state.zIndex.global,
zComponent2: state.zIndex.global,
}
...为了给每个组件自己的 z 索引状态,它只是反映全局状态,但这只是保持 z 索引为零。我尝试了一些类似的东西,但没有奏效。我不确定我是否以错误的方式进行此操作,或者是本地更新反映全局状态的状态的最佳方式,但我们将不胜感激。
解决方案
您可以创建一个函数getNextZ
,给定具有所有每个组件 z-index 的对象,返回下一个 z-index。然后,您将使用该函数来计算下一个 z-index 并更新存储。每个组件应该只知道自己的 z-index。
case "INC_Z_COMP1":
return {
...state,
zIndexes: { ...state.zIndexes, Component1: getNextZ (state.zIndexes) },
}
case "INC_Z_COMP2":
return {
...state,
zIndexes: { ...state.zIndexes, Component2: getNextZ (state.zIndexes) },
}
如果您直接将 z-indexes 存储为值:
{ // ...state
zIndexes: {
Component1: 1,
Component2: 2,
Component3: 7,
}
}
那么你的函数可能看起来像这样;
const getNextZ = zIndexes => Math.max (...Object.values (zIndexes)) + 1;
推荐阅读
- c++ - 如何删除用户输入字符串末尾的空字符?
- python - 我正在尝试批量创建按钮,但命令功能不想工作
- javascript - 未找到 -lBVLinearGradient 的库
- vb.net - 生成一个由 5 个随机数组成的序列
- python - 需要帮助在 Python 中返回具有多个变量的字符串
- php - 如何修复 Symfony 中的“但新值必须是数组或 \Traversable 的实例”错误
- composer-php - 如何摆脱 Composer 错误 mkdir(): Not a directory when using param --no-cache with some dependencies?
- python - 氡变换:优化源/探测器与旋转中心之间的距离
- type-conversion - 用户定义类型的隐式转换?
- c - 如何在装配中返回?