REACT

[React] 게시판 만들기 (4) - 삭제 기능 구현하기

ksh21 2022. 1. 31. 17:01

저장된 데이터 옆에 X 버튼을 만들고, 이것을 누르면 데이터가 삭제되는 기능을 구현해보려 합니다

 

class App5 extends Component {
    ~~ 생략 ~~
    handleRemove = (brdno) => {
        this.setState({
            boards: this.state.boards.filter(row => row.brdno !== brdno)
        })
    }
    ~~ 생략 ~~
    
    render() {
        const { boards } = this.state;

        return (
            ~~ 생략 ~~
                    {
                        boards.map(row =>
                            (<BoardItem key={row.brdno} row={row} onRemove={this.handleRemove} onSelectRow={this.handleSelectRow} />)
                        )
                    }
            ~~ 생략 ~~
}

class BoardItem extends React.Component {
    handleRemove = () => {
        const { row, onRemove } = this.props;
        onRemove(row.brdno);
    }    
    ~~ 생략 ~~
    render() {
        console.log(this.props.row.brdno);
        return(
            <tr>
                <td>{this.props.row.brdno}</td>
                <td><a onClick={this.handleSelectRow}>{this.props.row.brdtitle}</a></td>
                <td>{this.props.row.brdwriter}</td>
                <td>{this.props.row.brddate.toLocaleDateString('ko-KR')}</td>
                <td><button onClick={this.handleRemove}>X</button></td>
            </tr>
        );
    }
}

 

 

(1) 먼저 각 데이터 끝에 X 버튼을 만들어 주고, handleRemove와 연결시켜 놓는디

 

(2) BoardItem 컴포넌트 안에 handleRemove를 만든다.

 

(3) App 컴포넌트의 <BoardItem /> 부분에 onRemove 라는 이름으로 handleRemove를 연결시켜 놓는다

 

(4) App 컴포넌트에 handleRemove를 만들고 filter 함수 활용하여 글을 삭제한다.

 

예를 들어 데이터가 세 개일때 row.brdno가 1 2 3 이고 지우려는 데이터의 brdno가 3이라면 row.brdno !==brdno인

1 2 만 남겨두고 3은 지우는 방식이다. (난 이렇게 이해했는데 맞는지 모르겠다ㅜㅜ)

 

 

데이터 삭제 기능의 경우 handleRemove라는 핸들러가 부모, 자식 컴포넌트에 둘 다 생겨서 이걸 이해하는 게 힘들었습니다 ㅠㅠ 지금도 50% 정도 밖에 이해하지 못한 것 같아서 자세한 설명을 적지 못했고 조금 더 공부하고 이해한 후에 보충하려 합니다!