Skip to content

Instantly share code, notes, and snippets.

@gujc71
Last active June 30, 2020 14:06
Show Gist options
  • Save gujc71/8ff04eff352d22ef0eff070296b4e331 to your computer and use it in GitHub Desktop.
Save gujc71/8ff04eff352d22ef0eff070296b4e331 to your computer and use it in GitHub Desktop.
react_board
class App5 extends Component {
constructor(props) {
super(props);
this.child = React.createRef();
}
~~ 생략 ~~
handleSaveData = (data) => {
let boards = this.state.boards;
if (data.brdno ===null || data.brdno==='' || data.brdno===undefined) { // new : Insert
this.setState({
maxNo: this.state.maxNo+1,
boards: boards.concat({brdno: this.state.maxNo, brddate: new Date(), brdwriter: data.brdwriter, brdtitle: data.brdtitle })
});
} else { // Update
this.setState({
boards: boards.map(row => data.brdno === row.brdno ? {...data }: row)
})
}
}
~~ 생략 ~~
handleSelectRow = (row) => {
this.child.current.handleSelectRow(row);
}
render() {
const { boards } = this.state;
return (
<div>
<BoardForm onSaveData={this.handleSaveData} ref={this.child}/>
~~ 생략 ~~
{
boards.map(row =>
(<BoardItem key={row.brdno} row={row} onRemove={this.handleRemove} onSelectRow={this.handleSelectRow} />)
)
}
</tbody>
</table>
</div>
);
}
}
class BoardItem extends React.Component {
~~ 생략 ~~
handleSelectRow = () => {
const { row, onSelectRow } = this.props;
onSelectRow(row);
}
render() {
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>
);
}
}
class BoardForm extends Component {
state = {
brdwriter:'',
brdtitle:''
}
~~ 생략 ~~
handleSelectRow = (row) => {
this.setState(row);
}
handleSubmit = (e) => {
e.preventDefault();
this.props.onSaveData(this.state);
this.setState({
brdno:'',
brdwriter:'',
brdtitle:''
});
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<input placeholder="title" name="brdtitle" value={this.state.brdtitle} onChange={this.handleChange}/>
<input placeholder="name" name="brdwriter" value={this.state.brdwriter} onChange={this.handleChange}/>
<button type="submit">Save</button>
</form>
);
}
}
export default App5;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment