Last active
June 30, 2020 14:06
-
-
Save gujc71/8ff04eff352d22ef0eff070296b4e331 to your computer and use it in GitHub Desktop.
react_board
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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