Javascript 在动作分派时向对象数组中的每个对象添加键属性
这是我的问题, 我的大脑有一个状态Javascript 在动作分派时向对象数组中的每个对象添加键属性,javascript,react-native,react-redux,Javascript,React Native,React Redux,这是我的问题, 我的大脑有一个状态 const initialState = { arrOfObjects: [ {name: 'John', age: 30, nickname: 'Johnny'}, {name: 'Jack', age: 31, nickname: 'Jackie'}, {name: 'Bill', age: 32, nickname: 'Billie'} ] } case actionTypes.PERSON_LA
const initialState = {
arrOfObjects: [
{name: 'John', age: 30, nickname: 'Johnny'},
{name: 'Jack', age: 31, nickname: 'Jackie'},
{name: 'Bill', age: 32, nickname: 'Billie'}
]
}
case actionTypes.PERSON_LASTNAME:
return{
...state,
arrOfObjects: state.arrOfObjects.map(person => ({
...person,
_lastname: action.lastname
}))
}
我发出一个行动
axios.all(personIds.map(el => axios.get(`/people/${el}/persons`)))
.then(res => {
for (let per in res) {
dispatch(personLastname(res[per].data.lastname))
}
});
然后我在我的减速机里做这个
const initialState = {
arrOfObjects: [
{name: 'John', age: 30, nickname: 'Johnny'},
{name: 'Jack', age: 31, nickname: 'Jackie'},
{name: 'Bill', age: 32, nickname: 'Billie'}
]
}
case actionTypes.PERSON_LASTNAME:
return{
...state,
arrOfObjects: state.arrOfObjects.map(person => ({
...person,
_lastname: action.lastname
}))
}
所以问题是,使用这种方法,我向数组中的每个对象添加key属性,但每个对象都有相同的键值,即最后调度的值
const initialState = {
arrOfObjects: [
{name: 'John', age: 30, nickname: 'Johnny', _lastname: 'Smith'},
{name: 'Jack', age: 31, nickname: 'Jackie', _lastname: 'Smith'},
{name: 'Bill', age: 32, nickname: 'Billie', _lastname: 'Smith'}
]
}
如何将此键属性_lastname添加到每个对象中,但按照调度操作时的顺序,first lastname应该属于John object,second应该属于Jack,依此类推。。。我希望这有意义
提前谢谢
编辑:
personLastName函数的外观如下:
export const personLastname = lastname => {
return{
type: PERSON_LASTNAME,
lastname: lastname
}
}
方法1:解决每个axios调用后调用操作
axios.all(personIds.map(el => axios.get(`/people/${el}/persons`).then(res => {
dispatch(personLastname(res.data.lastname)) // Assuming you get response with data prop
})));
方法2:将整个阵列作为有效负载而不是单个项目发送操作,并在reducer中处理匹配。这假设resp中姓氏对象的顺序与状态相同
axios.all(personIds.map(el => axios.get(`/people/${el}/persons`)))
.then(res => dispatch(personLastname(res));
export const personLastname = people => {
return{
type: PERSON_LASTNAME,
people: people
}
}
case actionTypes.PERSON_LASTNAME:
return {
...state,
arrOfObjects: state.arrOfObjects.map((person, i) => ({
...person,
_lastname: action.people[i].data.lastname
}))
}
personLastName函数是什么样子的?@samanime我编辑了这个问题并添加了personLastName函数。还有,你是如何从api外观中获得res的?如果我在for循环中使用console.logres[per].data.lastname,我总是按照应该的顺序获得lastnames。是的,但是console.logres看起来怎么样?谢谢@Clarity。第二种方法是解决方案。非常感谢你。