React Redux中如何通过字符串值获取对应state数组的长度
解决Redux Slice中动态获取对象属性的问题
嘿,我懂你碰到的这个问题了——你现在写的state.sprites.{payload}是完全不符合JavaScript语法的,这就是报错的根源。要通过动态字符串(也就是你的payload值)访问对象属性,得用方括号语法才行。
正确的Reducer写法
把你的reducer改成这样就能正常获取对应数组的长度了:
checkArray: (state, { payload }) => { // 用方括号语法动态访问属性 const arrayLength = state.sprites[payload].length; console.log(arrayLength); }
额外的容错建议
为了避免用户传入不存在的键名(比如"four")导致代码报错,最好加个简单的判断逻辑:
checkArray: (state, { payload }) => { const targetArray = state.sprites[payload]; if (targetArray) { console.log(targetArray.length); } else { console.warn(`找不到名为 ${payload} 的数组哦!`); } }
为什么方括号语法可行?
JavaScript里访问对象属性有两种方式:
- 点语法:
obj.propertyName,只能用于你提前知道具体名称的固定属性 - 方括号语法:
obj[propertyKey],可以接受变量、字符串甚至表达式来动态获取属性
你的场景里payload是一个动态的字符串值,所以必须用方括号语法才能正确对应到state.sprites下的目标数组~
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

