如何使用钩子遍历数组并保存数据
How to iterate over array and save data using hooks
想法是遍历数组并保存(或更新)值。
const [skills, setSkills] = useState([]);
useEffect(() => {
Object.entries(array).forEach(([k, v]) => {
console.log("The skill is: ", k, " and value: ", v)
setSkills({ ...skills, [k]: v })
});
}, [array]);
输出为:
The skill is: 1 and value: 30
The skill is: 2 and value: 40
The skill is: 3 and value: 90
没关系,我认为“技能”应该是:
{1: 30, 2: 40, 3: 90}
1: 30
2: 40
3: 90
但实际上,它只保存了最后一次输入。我的意思是,我看到以下内容:
{3: 90}
3: 90
拜托,有人可以解释为什么吗?以及如何以正确的方式做到这一点?
谢谢!!!
一开始技能是array of objects
,但你在循环中将其更改为single object
,这就是为什么你只看到状态
中的最后输出的原因
这应该可以解决您的问题
useEffect(() => {
Object.entries(json_h).forEach(([k, v]) => {
console.log("The skill is: ", k, " and value: ", v)
setSkills([ ...skills, {[k]: v} ]) // notice changes here
});
}, [json_h]);
虽然我建议将新值保存在一个临时数组中,然后更改状态一旦这将摆脱不必要的 setState 调用
useEffect(() => {
let tempArr = [];
Object.entries(json_h).forEach(([k, v]) => {
console.log("The skill is: ", k, " and value: ", v)
tempArr.push({[k]: v})
});
setSkills([...skills, ...tempArr])
}, [json_h]);
你可以这样做:
const [skills, setSkills] = useState([])
useEffect(() => {
setSkills([
...skills,
...Object.entries(json_h).map(([k, v]) => ({[k]: v})),
])
}, [json_h])
想法是遍历数组并保存(或更新)值。
const [skills, setSkills] = useState([]);
useEffect(() => {
Object.entries(array).forEach(([k, v]) => {
console.log("The skill is: ", k, " and value: ", v)
setSkills({ ...skills, [k]: v })
});
}, [array]);
输出为:
The skill is: 1 and value: 30
The skill is: 2 and value: 40
The skill is: 3 and value: 90
没关系,我认为“技能”应该是:
{1: 30, 2: 40, 3: 90}
1: 30
2: 40
3: 90
但实际上,它只保存了最后一次输入。我的意思是,我看到以下内容:
{3: 90}
3: 90
拜托,有人可以解释为什么吗?以及如何以正确的方式做到这一点? 谢谢!!!
一开始技能是array of objects
,但你在循环中将其更改为single object
,这就是为什么你只看到状态
这应该可以解决您的问题
useEffect(() => {
Object.entries(json_h).forEach(([k, v]) => {
console.log("The skill is: ", k, " and value: ", v)
setSkills([ ...skills, {[k]: v} ]) // notice changes here
});
}, [json_h]);
虽然我建议将新值保存在一个临时数组中,然后更改状态一旦这将摆脱不必要的 setState 调用
useEffect(() => {
let tempArr = [];
Object.entries(json_h).forEach(([k, v]) => {
console.log("The skill is: ", k, " and value: ", v)
tempArr.push({[k]: v})
});
setSkills([...skills, ...tempArr])
}, [json_h]);
你可以这样做:
const [skills, setSkills] = useState([])
useEffect(() => {
setSkills([
...skills,
...Object.entries(json_h).map(([k, v]) => ({[k]: v})),
])
}, [json_h])