From b7fe4dc31b428ee212b3870f1faf09228c5cbd50 Mon Sep 17 00:00:00 2001 From: qwerq123456 Date: Fri, 18 Sep 2020 19:34:29 +0900 Subject: [PATCH] react-practice --- package.json | 2 + src/App.js | 26 +++- src/componets/Todo/Todo.css | 32 +++++ src/componets/Todo/Todo.js | 16 +++ src/componets/TodoDetail/TodoDetail.css | 15 +++ src/componets/TodoDetail/TodoDetail.js | 25 ++++ src/containers/TodoList/NewTodo/NewTodo.css | 42 +++++++ src/containers/TodoList/NewTodo/NewTodo.js | 43 +++++++ src/containers/TodoList/TodoList.css | 16 +++ src/containers/TodoList/TodoList.js | 57 +++++++++ yarn.lock | 133 +++++++++++++++++--- 11 files changed, 388 insertions(+), 19 deletions(-) create mode 100644 src/componets/Todo/Todo.css create mode 100644 src/componets/Todo/Todo.js create mode 100644 src/componets/TodoDetail/TodoDetail.css create mode 100644 src/componets/TodoDetail/TodoDetail.js create mode 100644 src/containers/TodoList/NewTodo/NewTodo.css create mode 100644 src/containers/TodoList/NewTodo/NewTodo.js create mode 100644 src/containers/TodoList/TodoList.css create mode 100644 src/containers/TodoList/TodoList.js diff --git a/package.json b/package.json index 6c050f8..47ab41c 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "dependencies": { "react": "^16.9.0", "react-dom": "^16.9.0", + "react-router": "^5.2.0", + "react-router-dom": "^5.2.0", "react-scripts": "3.1.1" }, "scripts": { diff --git a/src/App.js b/src/App.js index e358583..f76f32e 100644 --- a/src/App.js +++ b/src/App.js @@ -1,11 +1,27 @@ -import React from 'react'; -import logo from './logo.svg'; -import './App.css'; +import React from "react"; +import "./App.css"; +import { BrowserRouter, Route, Redirect, Switch } from "react-router-dom"; +import NewTodo from "./containers/TodoList/NewTodo/NewTodo"; +import TodoList from "./containers/TodoList/TodoList"; +import TodoDetail from "./componets/TodoDetail/TodoDetail"; function App() { return ( -
-
+ +
+ + } + /> + + + +

Not Found

} /> +
+
+
); } diff --git a/src/componets/Todo/Todo.css b/src/componets/Todo/Todo.css new file mode 100644 index 0000000..805d753 --- /dev/null +++ b/src/componets/Todo/Todo.css @@ -0,0 +1,32 @@ + +.Todo { + border-top: 1px solid #f1f3f5; + padding: 1rem; + display: flex; + align-items: center; + transition: all 0.15s; +} + +.Todo .text { + flex: 1; + text-align: left; + word-break: break-all; + cursor: pointer; +} + +.Todo .text:hover { + color: orange; +} + +.Todo .done { + text-decoration: line-through; + color: #adb5bd; +} + +.Todo .done-mark { + font-size: 1.5rem; + line-height: 1rem; + margin-left: 1rem; + color: orange; + font-weight: 800; +} diff --git a/src/componets/Todo/Todo.js b/src/componets/Todo/Todo.js new file mode 100644 index 0000000..e41c514 --- /dev/null +++ b/src/componets/Todo/Todo.js @@ -0,0 +1,16 @@ +import React from "react"; + +import "./Todo.css"; + +const Todo = (props) => { + return ( +
+
+ {props.title} +
+ {props.done &&
} +
+ ); +}; + +export default Todo; diff --git a/src/componets/TodoDetail/TodoDetail.css b/src/componets/TodoDetail/TodoDetail.css new file mode 100644 index 0000000..c56cf70 --- /dev/null +++ b/src/componets/TodoDetail/TodoDetail.css @@ -0,0 +1,15 @@ +.TodoDetail .row { + display: flex; + padding: 20px; + height: 30px; + text-align: left; +} + +.TodoDetail .left { + font-weight: bold; + flex: 25% +} + +.TodoDetail .right { + flex: 75%; +} diff --git a/src/componets/TodoDetail/TodoDetail.js b/src/componets/TodoDetail/TodoDetail.js new file mode 100644 index 0000000..18f0ded --- /dev/null +++ b/src/componets/TodoDetail/TodoDetail.js @@ -0,0 +1,25 @@ +import React from "react"; + +import "./TodoDetail.css"; + +class TodoDetail extends React.Component { + render() { + if (this.props.match) { + console.log(this.props.match.params.id); + } + return ( +
+
+
Name:
+
{this.props.title}
+
+ +
+
Content:
+
{this.props.content}
+
+
+ ); + } +} +export default TodoDetail; diff --git a/src/containers/TodoList/NewTodo/NewTodo.css b/src/containers/TodoList/NewTodo/NewTodo.css new file mode 100644 index 0000000..cb36d05 --- /dev/null +++ b/src/containers/TodoList/NewTodo/NewTodo.css @@ -0,0 +1,42 @@ + +.NewTodo { + width: 80%; + margin: 20px auto; + border: 1px solid #eee; + box-shadow: 0 2px 3px #ccc; + text-align: center; +} + +.NewTodo label { + display: block; + margin: 10px auto; + text-align: center; + font-weight: bold; +} + +.NewTodo input, +.NewTodo textarea { + display: block; + width: 80%; + box-sizing: border-box; + border: 1px solid black; + outline: none; + font: inherit; + margin: auto; +} + +.NewTodo button { + margin: 5px 0; + padding: 10px; + font: inherit; + border: 1px solid #fa923f; + background-color: transparent; + color: #fa923f; + cursor: pointer; +} + +.NewTodo button:hover, +.NewTodo button:active { + color: white; + background-color: #fa923f; +} diff --git a/src/containers/TodoList/NewTodo/NewTodo.js b/src/containers/TodoList/NewTodo/NewTodo.js new file mode 100644 index 0000000..e901194 --- /dev/null +++ b/src/containers/TodoList/NewTodo/NewTodo.js @@ -0,0 +1,43 @@ +import React, { Component } from "react"; +import "./NewTodo.css"; +import { Redirect } from "react-router-dom"; +class NewTodo extends Component { + postTodoHandler = () => { + const data = { title: this.state.title, content: this.state.content }; + alert("Submitted\n" + data.title + "\n" + data.content); + this.setState({ submitted: true }); + this.props.history.push("/todos"); + }; + state = { + title: "", + content: "", + submitted: false, + }; + render() { + let redirect = null; + if (this.state.submitted) { + redirect = ; + } + return ( +
+ {redirect} +

Add a Todo

+ + this.setState({ title: event.target.value })} + /> + +