Javascript 反应合并第三状态中的两个状态
我有三个状态,其中两个有来自不同api的数据,第三个状态需要基于ID合并这两个状态。因此,第三个状态应该包含state1拥有和state2不拥有的所有数据,以及state2拥有和state1不拥有的所有数据 Api1: Api2: 获取的数据:Javascript 反应合并第三状态中的两个状态,javascript,reactjs,Javascript,Reactjs,我有三个状态,其中两个有来自不同api的数据,第三个状态需要基于ID合并这两个状态。因此,第三个状态应该包含state1拥有和state2不拥有的所有数据,以及state2拥有和state1不拥有的所有数据 Api1: Api2: 获取的数据: const [state1, setState1] = useState([]); const [state2, setState2] = useState([]); const [mergeStates, setMergeStates] = useSt
const [state1, setState1] = useState([]);
const [state2, setState2] = useState([]);
const [mergeStates, setMergeStates] = useState([]);
useEffects(() => {
fetch("api1")
.then(data =>{
state1(data);
})
fetch("api2")
.then(data =>{
state2(data);
})
}, []);
useEffects(() => {
// Here I want to merge the responses based on IDs
const lastName = companies.map((response) => ({
name: response.name,
lastName: `${response.name} - ${response.lastName}`
}));
setMergeState(lastName);
}, [state1, state2]);
因此,api2有api1没有的姓氏。因此,mergedStates需要包括这一点。根据您合并这两个状态的请求,您需要在合并它们时迭代状态1或2
useEffects(() => {
const keys = Object.keys(state1);
mergedData = keys.map(key => {
// key will be 0,1,2 as with your quetion
return {
...state1[key],
...state2[key],
fullName: state1[key].name + state2[key].lastName
};
});
}, [state1, state2]);
请向我们展示您迄今为止所做的尝试。还有,为什么你有一个键控对象(看起来像一个数组),里面有ID键?@Agney我已经根据示例更新了我的请求,API2包括API1,所以我不明白为什么你需要合并它们。什么是mergedData?是常数吗?它可以是任何东西,在这种情况下是的,这是便秘的工作。如何将name+lastName组合在一起?请检查我的问题,我已更新。请注意,如果state1和State2对象包含重复的值,它们也会相互覆盖。不用担心,很乐意帮忙
const [state1, setState1] = useState([]);
const [state2, setState2] = useState([]);
const [mergeStates, setMergeStates] = useState([]);
useEffects(() => {
fetch("api1")
.then(data =>{
state1(data);
})
fetch("api2")
.then(data =>{
state2(data);
})
}, []);
useEffects(() => {
// Here I want to merge the responses based on IDs
const lastName = companies.map((response) => ({
name: response.name,
lastName: `${response.name} - ${response.lastName}`
}));
setMergeState(lastName);
}, [state1, state2]);
useEffects(() => {
const keys = Object.keys(state1);
mergedData = keys.map(key => {
// key will be 0,1,2 as with your quetion
return {
...state1[key],
...state2[key],
fullName: state1[key].name + state2[key].lastName
};
});
}, [state1, state2]);