首页 > 解决方案 > 使用调度更改数组的特定值

问题描述

我正在浏览页面上我想将 islLiked 的值从 true 更改为 false 或相反的依赖于给我用户 id 的 onClick


//this is how i set the result into state
{ ...state, browser: { ...state.browser, result: payload } };

这是我的状态在此处输入图像描述

这是我的减速机

export const profileInitState = {
  photo: {
    loading: true,
    profile_Image: "",
    cover_Image: "",
    first_Image: "",
    second_Image: "",
    third_Image: "",
    fourth_Image: ""
  },
  info: {
    loading: true,
    liked: false,
    matched: false,
    blocked: false,
    id: "",
    user_first_name: "",
    user_last_name: "",
    user_gender: "",
    user_relationship: "",
    user_birth_day: "",
    user_birth_month: "",
    user_gender_interest: "",
    user_birth_year: "",
    user_age: "",
    user_tags: "",
    user_city: "",
    user_current_occupancy: "",
    user_biography: "",
    user_set_from_map: null,
    user_fame_rate: 0,
    user_location: {
      lat: "",
      lng: ""
    }
  },
  browser: {
    result: [],
    sort_by: ""
  }
};

export const profileReducer = (state, action) => {
  const { type, payload } = action;
  switch (type) {
    case PHOTO_SUCCESS:
      return { ...state, photo: payload };
    case INFO_SUCCESS:
      return { ...state, info: payload };
    case PROFILE_BLOCKED:
      return { ...state, info: { ...state.info, blocked: payload } };
    case PROFILE_LIKED:
      return { ...state, info: { ...state.info, liked: payload } };
    case PROFILE_MATCHED:
      return { ...state, info: { ...state.info, matched: payload } };
    case BROWSER_RETURN:
      return { ...state, browser: { ...state.browser, result: payload } };
    case SET_NEW_ISLIK:
    // i want to keep the previouse result and change only the value of islike with the value of payload but just for the chossen user with the same id it will also be on payload: {
        //isLike: res.fromdb,
        //valide: id
      //}
    case SORT_BY_BACK:
      return { ...state, browser: { ...state.browser, sort_by: payload } };
    default:
      return state;
  }
};

isLike 的新值将在有效负载上

我想知道是否有办法在用户 id 的帮助下做到这一点希望你能得到我试图解释的内容

标签: javascriptreactjs

解决方案


那应该这样做:

case SET_NEW_ISLIK:
  return {
    ...state,
    browser: {
      ...state.browser,
      result: state.browser.result.map(user => (
        user.id === payload.userId
        ? { ...user, isLiked: payload.isLiked }
        : user )
      )
    }
  }

推荐阅读