250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

스케줄 관리(투두리스트-todolist) 리액트로 만들어보기 본문

[Snow-ball]프로그래밍(컴퓨터)/미니앱

스케줄 관리(투두리스트-todolist) 리액트로 만들어보기

Snow-ball 2022. 3. 3. 19:00
반응형

스케줄을 관리할 수 있는 투두리스트를 리액트로 만들어봤다.

테스크를 추가하고 일정목록에서 완료와 미완료를 구분할 수 있으며, 완료와 미완료들을 따로 볼 수 있게 구현해놨다.

추가적으로 해당하는 단어가 검색이 되는 기능도 추가되어있다.

 

 

 

 

코드 : 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import React, { useRef, useState } from "react";
import { Button, Input } from "semantic-ui-react";
 
const Board = () => {
  const [completion, setCompletion] = useState(false);
  const [inputText, setInputText] = useState({
    content"",
    keyword: "",
  });
  const { content, keyword } = inputText;
 
  const handleInput = (e) => {
    setInputText({ ...inputText, [e.target.name]: e.target.value });
  };
 
  const [contentArr, setContentArr] = useState([]);
  const [check, setCheck] = useState(false);
  const arrId = useRef(0);
  const addValue = (e) => {
    const contentState = {
      id: arrId.current,
      value: content,
      done: false,
    };
    setContentArr([...contentArr, contentState]);
    setInputText({ ...inputText, [e.target.name]: "" });
    arrId.current += 1;
  };
 
  const deleteArr = (index) => {
    contentArr.splice(index, 1);
    setContentArr((contentArr) => [...contentArr]);
  };
 
  const checkBox = (e, index) => {
    const contentState = {
      id: index,
      value: contentArr[index].value,
      done: e.target.checked === true ? true : false,
    };
 
    contentArr.splice(index, 1, contentState);
    setCheck(!check);
  };
 
  return (
    <>
      <Input
        type="text"
        name="keyword"
        value={keyword}
        onChange={handleInput}
        placeholder="검색 키워드를 입력하세요."
      />
      <hr align="left" width="25%" />
      <div>
        <b>일정 목록</b> ㅤㅤㅤㅤ완료 목록만 보기
        <input type="checkbox" onChange={() => setCompletion(!completion)} />
      </div>
      {completion ? (
        <>
          {contentArr.filter((element) => element.value).length === 0 ? (
            <p>등록된 일정이 없습니다.</p>
          ) : (
            <>
              {contentArr
                .filter((element) => {
                  if (keyword === "") {
                    return element.value;
                  } else if (element.value.includes(keyword)) {
                    return element.value;
                  }
                })
                .map((element, index) => {
                  return (
                    <>
                      {element.done ? (
                        <ul>
                          <input
                            type="checkbox"
                            checked="true"
                            onChange={(e) => checkBox(e, index)}
                          />
 
                          {element.value}
                          <Button onClick={() => deleteArr(index)}>삭제</Button>
                        </ul>
                      ) : (
                        ""
                      )}
                    </>
                  );
                })}
            </>
          )}
        </>
      ) : (
        <>
          {contentArr.filter((element) => element.value).length === 0 ? (
            <p>등록된 일정이 없습니다.</p>
          ) : (
            <>
              {contentArr
                .filter((element) => {
                  if (keyword === "") {
                    return element.value;
                  } else if (element.value.includes(keyword)) {
                    return element.value;
                  }
                })
                .map((element, index) => {
                  return (
                    <>
                      {element.done ? (
                        ""
                      ) : (
                        <ul>
                          <input
                            type="checkbox"
                            onChange={(e) => checkBox(e, index)}
                          />
 
                          {element.value}
                          <Button onClick={() => deleteArr(index)}>삭제</Button>
                        </ul>
                      )}
                    </>
                  );
                })}
            </>
          )}
        </>
      )}
      <hr align="left" width="25%" />
      <Input
        type="text"
        name="content"
        value={content}
        placeholder="테스크명을 입력하세요."
        onChange={handleInput}
      />
      <Button name="content" onClick={addValue}>
        추가
      </Button>
    </>
  );
};
 
export default Board;
cs

 

 

 

깃 주소 :

https://github.com/akdl911215/Test-Collection/blob/master/storybook/schedule-manager/src/webapp/Board.js

 

GitHub - akdl911215/Test-Collection: test-collection

test-collection. Contribute to akdl911215/Test-Collection development by creating an account on GitHub.

github.com

 

 

 

 

 

 

 

 

 

 

 

베타존 : 네이버쇼핑 스마트스토어

나를 꾸미다 - 인테리어소품 베타존

smartstore.naver.com

 

반응형
Comments