如何不使用useMemo,用简单const实现目标数组且避免代码重复?
可行的实现方案
这里有几种满足你需求的写法,既不用useMemo,也避免重复写"el1":
1. 数组展开运算符(最简洁)
利用ES6的数组展开语法,根据条件决定是否追加元素:
const myResult = ["el1", ...(someCondition ? ["el2", "el3"] : [])];
当someCondition为真时,展开["el2", "el3"]拼接到原数组后;为假时展开空数组,结果就是["el1"]。
2. 定义基础数组再扩展
先单独定义基础数组,再根据条件生成最终结果:
const baseArr = ["el1"]; const myResult = someCondition ? [...baseArr, "el2", "el3"] : baseArr;
或者用concat方法:
const baseArr = ["el1"]; const myResult = someCondition ? baseArr.concat(["el2", "el3"]) : baseArr;
这种方式把固定元素抽离出来,逻辑更清晰,也避免了重复。
3. 立即执行函数表达式(IIFE,和原逻辑最一致)
把你之前写的函数变成立即执行的形式,直接得到数组而非函数:
const myResult = (() => { const arr = ["el1"]; if (someCondition) { arr.push("el2", "el3"); } return arr; })();
这个写法和你原本useMemo里的逻辑几乎完全一样,只是每次渲染都会重新执行函数生成数组,符合你“逻辑简单可每次重新计算”的要求。
你并不是多虑,避免重复代码是合理的编码习惯,以上几种方案都能满足你的需求,可以根据实际场景选择最顺手的写法。
内容的提问来源于stack exchange,提问作者MatteoDelOmbra
相关产品推荐
相关产品推荐

