javascript - 使用 Hooks 在 ReactJS 中设置数组
问题描述
我目前有一组 FooBar 对象
interface FooBar {
foo: string,
bar: string,
correct: string,
other: string[]
}
const [arrOfObj, setArrOfObj] = useState<FooBar[]>([
{ "foo": "foolicious ", "bar": "barlicious", "correct": "foobarlicious", "other": ["oof", "f00", "rab", "r@b"]},
]);
const [shuffledArrOfObj, setShuffledArrOfObj] = useState<FooBar[]>([
{ "foo": "", "bar": "", "correct": "", "other": [""]},
]);
但是我想随机洗牌每个对象中的“其他”数组,所以我有一个洗牌功能:
useEffect(() => {
(async () => {
const act = await shuffleObjs();
setShuffledArrOfObj([...act]);
})();
}, [arrOfObj]);
const shuffleObjs = () => {
let holdArr = [...arrOfObj];
for (let i: number = 0; i < holdArr.length; i++) {
holdArr[i].other = await handleShuffle(holdArr[i].other);
}
}
const handleShuffle = async (array: string[]) => {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
但是,如果我在“shuffleObjs”函数的末尾使用 console.log(holdArr),则对象数组与存储在 shuffledArryObj 状态下的对象数组完全不同。
我是否以错误的方式设置数组状态,或者我缺少什么?
编辑:错字不是问题,它仍然无法正常工作。我还尝试将 arrOfObj 添加到 dep 数组中。
解决方案
你错过了两件事:
useEffect(() => {
(async () => {
const act = await shuffleObjs();
setShuffledArrOfObj([...act]);
})();
}, [arrOfObj]); //<-- Add arrOfObj to dependency Array
const shuffleObjs = () => {
let holdArr = [...arrOfObj];
for (let i: number = 0; i < holdArr.length; i++) {
holdArr[i].other = await handleShuffle(hold[i].other); //<-- change hold[i] to holdArr[i]
}
}
推荐阅读
- rundeck - Rundeck - 在 5.8k 节点上运行时任何命令执行都会失败
- android - 如果回收站视图项中的数据为空,则不显示视图持有者
- ios - Swift and Sprite Kit - 我如何测量一个精灵行进的总距离?
- mongodb - Monoose DeprecationWarning collection.ensureIndex 和 useNewUrlParser
- tensorflow - Keras/Tensorflow 解决线性回归任务的局限性
- python - 如何处理 Keras 中的大图层
- java - 如何在画布中绘制多个圆圈?
- r - 使用 R 抓取 Youtube 视频标题
- python-3.x - Azure IOT 模块 - 无法订阅消息
- if-statement - 为什么 0 整数值在 groovy 中的 if 语句中表现为假?