Me learning react like an absolute chungus
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
1.6KB

  1. import React from "react";
  2. import { useState } from "react";
  3. import KBColumn from "./components/KBColumn";
  4. import "./App.css";
  5. import Header from "./components/Header";
  6. type Column = {
  7. id: number;
  8. name: string;
  9. color: string;
  10. };
  11. type State = {
  12. columns: Column[];
  13. iterator: number;
  14. };
  15. class App extends React.Component<{}, State> {
  16. constructor(props: any) {
  17. super(props);
  18. this.deleteColumn = this.deleteColumn.bind(this);
  19. this.addColumn = this.addColumn.bind(this)
  20. this.state = {
  21. iterator: 3,
  22. columns: [
  23. {
  24. id: 1,
  25. name: "Harry",
  26. color: "green",
  27. },
  28. {
  29. id: 2,
  30. name: "Potter",
  31. color: "red",
  32. },
  33. ],
  34. };
  35. }
  36. deleteColumn(id: number) {
  37. const { columns } = { ...this.state };
  38. const filteredColumns = columns.filter((column) => column.id !== id);
  39. this.setState({ columns: filteredColumns });
  40. console.log(this.state.columns);
  41. }
  42. addColumn() {
  43. let columnId = this.state.iterator;
  44. this.setState({ iterator: columnId + 1 });
  45. this.state.columns.push({
  46. id: columnId,
  47. name: "tempName" + columnId,
  48. color: "red",
  49. });
  50. }
  51. render() {
  52. return (
  53. <div className="App">
  54. <Header addColumn={this.addColumn}/>
  55. {this.state.columns.map((column, index) => (
  56. <KBColumn
  57. color={column.color}
  58. title={column.name}
  59. key={index}
  60. onDelete={this.deleteColumn}
  61. id={column.id}
  62. />
  63. ))}
  64. </div>
  65. );
  66. }
  67. }
  68. export default App;