[TIL/React] 2023/04/23
src/App.jssrc/Components/InputSection.jssrc/Components/TodoSection.jssrc/Components/CompleteSection.js오늘까지의 최선... 일단은 굴러간다
src/App.js
import React, { useState } from "react";
// import styled from "styled-components";
import InputSection from "./Components/InputSection";
import TodoSection from "./Components/TodoSection";
import CompleteSection from "./Components/CompleteSection";
const inputArray = ["title", "subTitle", "desc"];
const App = () => {
const [inputValue, setInputValue] = useState({
title: "",
subTitle: "",
desc: "",
isDone: false,
});
const [todos, setTodos] = useState([]);
const [editMode, setEditMode] = useState(false);
const [editValue, setEditValue] = useState({
title: "",
subTitle: "",
desc: "",
isDone: false,
});
const completeArray = todos?.filter((todo) => todo?.isDone === true);
const noCompleteArray = todos?.filter((todo) => todo?.isDone === false);
const handleInputValue = (event) => {
const { value, name } = event?.target;
console.log(event);
setInputValue((prev) => {
return { ...prev, [name]: value };
});
};
const handleAddClick = () => {
setTodos((prev) => {
return [
...prev,
{
...inputValue,
id: `${inputValue?.title}${inputValue?.subTitle}${inputValue?.desc}`,
},
];
});
setInputValue({
title: "",
subTitle: "",
desc: "",
isDone: false,
});
};
const handleDeleteClick = (id) => {
setTodos((prev) => prev?.filter((todo) => todo?.id !== id));
};
const handleCompleteClick = (id) => {
console.log(typeof id);
let newArray = [...todos].map((todo) =>
todo?.id === id ? { ...todo, isDone: true } : todo
);
setTodos(newArray);
};
const handleEditValue = (event) => {
const { value, name } = event?.target;
console.log(event);
setEditValue((prev) => {
return { ...prev, [name]: value };
});
};
const handleEditClick = (id) => {
const editTodo = todos.find((todo) => todo?.id === id);
setEditValue(editTodo);
setEditMode(true);
};
const handleSaveClick = () => {
setTodos((prev) => {
return prev?.map((todo) => {
if (todo?.id === editValue?.id) {
return {
...editValue,
};
} else {
return todo;
}
});
});
setEditMode(false);
setEditValue({
title: "",
subTitle: "",
desc: "",
isDone: false,
});
};
// console.log({ todos });
return (
<div>
<InputSection
inputArray={inputArray}
inputValue={inputValue}
handleInputValue={handleInputValue}
handleAddClick={handleAddClick}
/>
<TodoSection
noCompleteArray={noCompleteArray}
handleEditClick={handleEditClick}
handleCompleteClick={handleCompleteClick}
handleDeleteClick={handleDeleteClick}
editMode={editMode}
inputArray={inputArray}
editValue={editValue}
handleEditValue={handleEditValue}
handleSaveClick={handleSaveClick}
/>
{/* complete section */}
<CompleteSection
completeArray={completeArray}
handleDeleteClick={handleDeleteClick}
/>
</div>
);
};
export default App;
src/Components/InputSection.js
import React from "react";
const InputSection = ({
inputArray,
inputValue,
handleInputValue,
handleAddClick,
}) => {
return (
<div>
<h1>Todo List</h1>
{inputArray?.map((name, idx) => {
return (
<div key={idx}>
<span>{name}</span>
<input
name={name}
value={inputValue?.[name]}
onChange={handleInputValue}
/>
</div>
);
})}
<button onClick={handleAddClick}>추가</button>
</div>
);
};
export default InputSection;src/Components/TodoSection.js
import React from "react";
const TodoSection = ({
noCompleteArray,
handleEditClick,
handleCompleteClick,
handleDeleteClick,
editMode,
inputArray,
editValue,
handleEditValue,
handleSaveClick,
}) => {
return (
<div>
<h2>Todo Section</h2>
{noCompleteArray?.map((todo) => {
return (
<div
key={todo?.id}
style={{ border: "1px solid black", padding: "10px" }}
>
<div
style={{
display: "flex",
justifyContent: "flex-end",
columnGap: "5px",
}}
>
<button onClick={() => handleEditClick(todo?.id)}>수정</button>
<button onClick={() => handleCompleteClick(todo?.id)}>
완료
</button>
<button onClick={() => handleDeleteClick(todo?.id)}>삭제</button>
</div>
<p>Title: {todo?.title}</p>
<p>SubTitle: {todo?.subTitle}</p>
<p>Desc: {todo?.desc}</p>
</div>
);
})}
{editMode && (
<div>
<h2>Edit Mode</h2>
{inputArray?.map((name, idx) => {
return (
<div key={idx}>
<span>{name}</span>
<input
name={name}
value={editValue?.[name]}
onChange={handleEditValue}
/>
</div>
);
})}
<button onClick={handleSaveClick}>저장</button>
</div>
)}
</div>
);
};
export default TodoSection;
src/Components/CompleteSection.js
import React from "react";
const CompleteSection = ({ completeArray, handleDeleteClick }) => {
return (
<div>
<h2>Complete Section</h2>
{completeArray?.map((todo) => {
return (
<div
key={todo?.id}
style={{ border: "1px solid black", padding: "10px" }}
>
<div
style={{
display: "flex",
justifyContent: "flex-end",
columnGap: "5px",
}}
>
<button onClick={() => handleDeleteClick(todo?.id)}>삭제</button>
</div>
<p>Title: {todo?.title}</p>
<p>SubTitle: {todo?.subTitle}</p>
<p>Desc: {todo?.desc}</p>
</div>
);
})}
</div>
);
};
export default CompleteSection;오늘까지의 최선... 일단은 굴러간다
More to read
AI&ML 기초
Reference: https://bettermesol.github.io/ml/2019/09/16/ai-ml-dl/AI: 기계가 사람처럼 생각하고 판단하게 만드는 가장 넓은 범주의 기술입니다.ML: 데이터를 학습하여 스스로 규칙을 찾아내는 AI의 한 분야로,
'AI Agent Economy'Novitas : AI Agent가 지갑을 가지는 세상
얼마 전, 미래에셋증권 리서치 리포트(올해는 이더리움이다: 에이전트 시대의 Near Automata)를 접하게 되었습니다. AI Agent를 인간과 함께할 경제 주체로 바라보는 시각에 적잖이 충격을 받았더랬죠.한 가지 짚고 넘어갈 부분이 있습니다. 우리가 흔히 'AI'
'ERC-8004'Novitas: AI 에이전트 경제 주체
Web 4.0을 한 문장으로 정의하면 Sovereign Transact입니다.AI가 인간의 허락 없이 지갑을 소유하고, 결제를 수행하며, 인프라를 통제하는 주권적 경제 주체가 되는 세계입니다. Web 3.0이 블록체인 기반의 탈중앙화를 실현했다면, Web 4.0은 그