inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

따라하며 배우는 리액트 A-Z[19버전 반영]

React.memo 를 이용한 렌더링 최적화

react.memo 를 했는데 안되요 오타도 아닌데 왜그럴까요?

471

김사랑

작성한 질문수 10

0

import React from 'react'

    const List = React.memo (({
        id, title, completed, todoData, setTodoData, provided, snapshot
    }) =>{

    console.log('List is Rendering');

    const handleClick =(id) => {
        let newTodoData = todoData.filter((data)=> data.id !== id)
        console.log ('newTodoData', newTodoData);
        //this.setState({todoData: newTodoData});
        setTodoData(newTodoData);
        };

    const handleCompleteChange = (id) => {
        let newTodoData = todoData.map(data => {
            if(data.id === id){
            data.completed = !data.completed;
            }
            return data;
        })
        //this.setState({ todoData : newTodoData})
        setTodoData(newTodoData);
    };

  return (
    <div key={id} {...provided.draggableProps} ref={provided.innerRef} {...provided.dragHandleProps}
    className={`${snapshot.isDragging ? "bg-gray-400" : "bg-gray-100"} flex items-center justify-between w-full px-4 py-1 my-2 text-gray-600 bg-gray-100 rounded`}>

        <div className='item-center'>
            <input 
            type="checkbox" 
            defaultChecked={completed}
            onChange={() => handleCompleteChange(id)}/>
            <span className={completed ? 'line-through' : undefined}>{title}</span>
        </div>
            <div className='item-center'>
                <button className="px-4 py-2 float-right" onClick={()=> handleClick(id)}>x</button>
            </div>

    </div>
  )
});

export default List





import React from 'react'
import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';
import List from './List';

const Lists = React.memo(({ todoData,setTodoData }) => {
  console.log('Lists Component');

  const handleEnd = (result) => {
    console.log('result', result);
    if(!result.destination) return;
    const newTodoData = todoData;

    //1. 변경시키는 아이템을 배열에서 지워줍니다.
    //2. return 값으로 지워진 아이템을 잡아줍니다.
    const [reorderedItem] = newTodoData.splice(result.source.index, 1);

    //3. 원하는자리에 reorderedItem을 insert 해줍니다.
    newTodoData.splice(result.destination.index, 0, reorderedItem);
    setTodoData(newTodoData);
    
  };
x
  return (
      <div>
      <DragDropContext onDragEnd={handleEnd}>
          <Droppable droppableId='todo'>
              {(provided) => (
                  <div {...provided.droppableProps} ref={provided.innerRef}>
                      {todoData.map((data, index) => (
                          <Draggable
                              key={data.id}
                              draggableId={data.id.toString()}
                              index={index}
                          >
                              {(provided, snapshot) => (
                                <List
                                  key={data.id}
                                  id={data.id}
                                  title={data.title}
                                  completed={data.completed}
                                  todoData={todoData}
                                  setTodoData={setTodoData}
                                  provided={provided}
                                  snapshot={snapshot}
                                />
                              )}
                          </Draggable>
                      ))}
                      {provided.placeholder}
                  </div>
              )}
          </Droppable>
      </DragDropContext>
  </div>
  );

});

export default Lists

typescript react tdd redux Next.js

답변 1

0

John Ahn

안녕하세요 사랑님

렌더링 최적화가 적용이 안된다는 건가요?!

새 글에 저장소 주소랑 같이 올려주시면 직접 해볼게요 ~

감사합니다.

강의 소스 코드 압축 풀기 오류

0

71

1

런타임 에러 ㅠㅠ

0

86

1

강의대로 따라갔는데 에러보다 api키로 들어간 넷플릭스? 그런게 렌더링 되지 않습니다 ㅠ

0

102

1

안녕하세요 개발과 상관없는 질문입니다만

0

111

1

리액트 라우터 관련

0

103

1

react-beatiful-dnd에서 문제가 발생합니다.

0

103

1

react19에서는 react-beautiful-dnd가 설치되지 않습니다.

0

813

1

useEffect로 사용을 해도 되나요?

0

200

1

넷플릭스 오리지널 제외하고 슬라이드가 동작을 안합니다.

0

195

1

react 19의 useActionState가 더이상 isPending은 지원하지 않는 듯합니다

0

280

2

리액트 dockderfile 작성 시 COPY 질문

0

145

1

next.js에서부터는 react query 필요없는지

0

320

1

기능

0

197

1

오류가 안보여요

0

196

1

CSS

0

218

1

local storage

0

209

1

list컴포넌트 생성하기

0

224

1

검색어 입력 후 초기화하는 방법 궁금합니다!

0

331

1

Banner.css에 대해서

0

447

1

플러그인이 추천을 안해줍니다

0

321

1

마이너스버튼 테스트

0

279

2

리액트 서버 실행 오류

0

1156

2

오류메세지는 확인했는데 어떻게 고쳐야 할지 모르겠습니다 ㅠ

0

298

1

creactStore질문이요

1

284

2