Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@WDever
Created June 23, 2019 14:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save WDever/ba12fb213fd137c3a6dc8d45c52898ae to your computer and use it in GitHub Desktop.
Save WDever/ba12fb213fd137c3a6dc8d45c52898ae to your computer and use it in GitHub Desktop.
const board =
draft.board[
draft.board.findIndex(board => board.pk === action.meta.board_pk)
];
Object.assign(
board.comment[
board.comment.findIndex(comment => comment.pk === action.payload.pk)
],
action.payload,
);
// first
// 위와 동일한 board
board.comment[
board.comment.findIndex(comment => comment.pk === action.payload.pk)
] = {
...action.payload,
...board.comment[
board.comment.findIndex(comment => comment.pk === action.payload.pk)
]
}
// second
// 동일한 board
board.comment[
board.comment.findIndex(comment => comment.pk === action.payload.pk)
] = {
...action.payload,
나머지 모든
}
@velopert
Copy link

const state = {
  doNotTouchMe: false,
  boards: [
    {
      id: 1,
      comments: [],
    },
    {
      id: 2,
      comments: [],
    },
    {
      id: 3,
      comments: [
        {
          id: 1,
        },
        {
          id: 2,
        },
        {
          id: 3,
        },
        // ...
      ],
    },
  ]
}

const action = {
  type: 'LOAD_MORE_COMMENTS',
  payload: {
    board_id: 3,
    comment_id: 3,
    data: {
      text: 'lalalala'
    }
  }
}

const nextState = {
  ...state,
  boards: state.boards.map(
    board => {
      return board.id === action.payload.board_id
        ? {
          ...board,
          comments: board.comments.map(
            comment => {
              return comment.id === action.payload.comment_id
                ? { ...comment, ...action.payload.data }
                : comment
            }
          )
        }
        : board
    }
  )
}

console.log(JSON.stringify(nextState, null, 2));

@velopert
Copy link

import produce from 'immer';


const state = {
  doNotTouchMe: false,
  boards: [
    {
      id: 1,
      comments: [],
    },
    {
      id: 2,
      comments: [],
    },
    {
      id: 3,
      comments: [
        {
          id: 1,
        },
        {
          id: 2,
        },
        {
          id: 3,
        },
        // ...
      ],
    },
  ]
}

const action = {
  type: 'LOAD_MORE_COMMENTS',
  payload: {
    board_id: 3,
    comment_id: 3,
    data: {
      text: 'lalalala'
    }
  }
}

const nextState = produce(state, draft => {
  const board = state.boards.find(board => board.id === action.payload.board_id);
  const comment = board.comments.find(comment => comment.id === action.payload.comment_id);
  Object.assign(comment, action.payload.data);
})

console.log(JSON.stringify(nextState, null, 2));

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment