Javascript 反应合并第三状态中的两个状态

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

我有三个状态,其中两个有来自不同api的数据,第三个状态需要基于ID合并这两个状态。因此,第三个状态应该包含state1拥有和state2不拥有的所有数据,以及state2拥有和state1不拥有的所有数据

Api1:

Api2:

获取的数据:

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]);