ToDo app in React with Hooks&Context API
29430 단어 reactfrontendtutorialjavascript
기능 구성 요소, 연결 및 컨텍스트 API의 시대입니다.현대 React로 다시 찍어봅시다our todo app from the past.
First of all; What are React Hooks and Context API?
갈고리: 갈고리는 React 응용 프로그램 개발의 구조로 구성 요소의 상태 논리를 추출하고 다시 사용할 수 있고 테스트할 수 있도록 합니다.
갈고리에 대한 추가 정보: Introducing Hooks – React
상하문 API: 상하문 API는 구성 요소 트리의 구성 요소 간에 데이터를 공유하는 방법을 제공합니다. 이 데이터를 사용하지 않는 구성 요소에 도구를 전달할 필요가 없습니다.
컨텍스트 API에 대한 자세한 내용을 보려면 여기를 클릭하십시오.Context – React
컨텍스트 API는
React.createContext
를 통해 컨텍스트를 작성해야 합니다.새 컨텍스트는 컨텍스트의
Provider
및 Consumer
구성 요소를 제공합니다.createreact 응용 프로그램을 사용하려면 npx it to get up and running 을 사용합니다.
npx create-react-app todo-react
현재 우리는 이미 프로젝트를 준비했다. 우리는 yarn start
또는 npm start
을 사용하여 프로젝트의 초기 운행을 진행할 것이다이것은 우리의react 프로젝트를 위해 로컬 개발 서버를 시작합니다.지금 브라우저에서 시작합니다https://localhost:3000. (포트 3000이 무료인 전제).브라우저에서 다음 화면이 표시됩니다.
현재 우리에게 중요한 파일은
App.js
입니다. 이것은 우리의 입구점입니다. 즉, 우리는 이곳에서 우리의 작은 todo 응용 프로그램을 조립할 것입니다.우리 todo 응용 프로그램은 세 가지 주요 기능을 가지고 있기 때문이다.
props에서 제공하는 todo 텍스트에서 todo 생성 함수를 가져옵니다.
이 함수는 todo 상태의 수합물화를 통해 todo 작업의 UI를 구축할 수 있습니다.
우리는 일부 기본 구조와 무작위 데이터부터 시작하여 처리해야 할 사항을 열거할 것이다.ToDo 작업에 대한 다음 데이터 구조를 살펴보겠습니다.
{
text: "First Todo",
description: "First Todo's Description",
createdOn: new Date().toUTCString()
}
어레이의 경우 다음 기능 구성 요소를 생성합니다.// ToDos.js
import React from "react";
export const Todo = ({ task, ...extra }) => (
<div className="card mb-3 bt-3" {...extra}>
<div className="card-body">
<h5 className="card-title">{task.text}</h5>
<p className="card-text">{task.description}</p>
<div className="footer">
<small>{task.createdOn}</small>
</div>
</div>
</div>
);
export default ({ tasks }) => (
<>
{(tasks || []).map((task, index) => (
<Todo task={task} key={index} />
))}
</>
);
기능 구성 요소에 관해서는 다음과 같은 몇 가지를 주의해야 한다.<>
는 React.Fragment
의 줄임말로 문서 부분과 유사하다.이것은 우리로 하여금 DOM의 청결을 유지할 수 있게 한다.export default ({ todos }) => (
;우리는 아이템에 대상을 사용하여 구조를 제거했다import React, { useState } from "react";
import Header from "./components/Header";
import ToDos from "./components/Todos";
import NewTask from "./components/NewTask";
import _tasks from "./_initial";
const App = () => {
const [tasks, updateTasks] = useState(_tasks);
return (
<>
<Header />
<div className="container">
<NewTask addTodo={task => updateTasks([...tasks, task])} />
<hr />
<ToDos tasks={tasks} />
</div>
</>
);
};
export default App;
지금까지 로컬 응용 상태의 Todo와 새로운 Todo가 있습니다.상태 갈고리를 사용하여 애플리케이션 수준에서 TODO의 로컬 상태를 유지할 수 있습니다.이제 새로운 업무 양식의 구성 요소를 살펴보겠습니다.
import React from "react";
export default ({ addTodo }) => {
const handleAdd = e => {
e.preventDefault();
// we need data from Form; for that we can use FormData API
const formData = new FormData(e.target);
console.log("---Form---", formData);
addTodo({
text: formData.get("text"),
description: formData.get("description"),
createdOn: new Date().toUTCString()
});
e.target.reset();
};
return (
<form onSubmit={handleAdd}>
<div className="form-group">
<label htmlFor="text" className="text-muted">
Task:
</label>
<input name="text" type="text" id="text" className="form-control" />
</div>
<div className="form-group">
<label htmlFor="description" className="text-muted">
Description:
</label>
<textarea
name="description"
id="description"
className="form-control"
/>
</div>
<div className="form-group">
<button type="submit" className="btn btn-primary">
Add
</button>
</div>
</form>
);
};
여기서 양식 필드에서 FormData API를 사용하여 값을 수집합니다.P.S. If you wanna know more about Form Data API, you can head over here:
FormData API: Handle Forms like Boss 😎 - Time to Hack
이제 어플리케이션을 실행할 수 있도록 구성 요소를 구성합니다.
import React, { useState } from "react";
import Header from "./components/Header";
import ToDos from "./components/Todos";
import NewTask from "./components/NewTask";
import _tasks from "./_initial";
const App = () => {
const [tasks, updateTasks] = useState(_tasks);
return (
<>
<Header />
<div className="container">
<NewTask
addTodo={task => updateTasks([...tasks, task])}
/>
<hr />
<ToDos tasks={tasks} />
</div>
</>
);
};
export default App;
현재, 우리의 todo 응용 프로그램은 이미 준비가 되었다.이 상태에서 응용 프로그램은 다음과 같습니다.
현재, 우리의 응용 프로그램을 더욱 맞춤형으로 만들기 위해서, 우리는 약간의 설정을 추가할 것이다.다음과 같습니다.
const app = {
title: "Time to Hack",
url: "https://time2hack.com",
logo:
"https://res.cloudinary.com/time2hack/image/upload/q_auto:good/t2h-text-banner.png"
};
const config = {
sortBy: "createdOn",
sortOrder: "DESC"
};
const sorters = {
ASC: (a, b) => a[config.sortBy] - b[config.sortBy],
DESC: (a, b) => b[config.sortBy] - a[config.sortBy]
};
const sorter = sorters[config.sortOrder];
export default {
...config,
app,
sorter
};
이제 다음 파일에서 컨텍스트를 작성합니다.import React from "react";
const Config = React.createContext({});
Config.displayName = "Config";
export default Config;
그리고 응용 프로그램 항목에서 컨텍스트 공급자에게 값을 파종합니다. import React, { useState } from "react";
import Header from "./components/Header";
import ToDos from "./components/Todos";
import NewTask from "./components/NewTask";
+ import Config from "./TodoContext";
+ import config from "./config";
import _tasks from "./_initial";
const App = () => {
const [tasks, updateTasks] = useState(_tasks);
return (
- <>
+. <Config.Provider value={config}>
<Header app={config.app} />
<div className="container">
<NewTask addTodo={task => updateTasks([...tasks, task])} />
<hr />
<ToDos tasks={tasks} />
</div>
- </>
+ </Config.Provider>
);
};
export default App;
이제 응용 프로그램의 다음 헤더에서 useContext
갈고리를 사용하여 컨텍스트 값을 사용할 수 있습니다.import React from "react";
export default ({ app }) => (
<header className="mb-3">
<nav className="navbar navbar-dark bg-dark">
<div className="container">
<a className="navbar-brand" href={app.url}>
<img src={app.logo} height="30" alt={app.title} />
</a>
</div>
</nav>
</header>
);
컨텍스트의 정렬 구성을 사용하여 작업의 정렬 순서를 나열합니다. import React, { useContext } from "react";
+ import Config from "../TodoContext";
export const Todo = ({ task, ...extra }) => (
<div className="card mb-3 bt-3" {...extra}>
<div className="card-body">
<h5 className="card-title">{task.text}</h5>
<p className="card-text">{task.description}</p>
<div className="footer">
<small>
{new Date(task.createdOn).toUTCString()}
</small>
</div>
</div>
</div>
);
export default ({ tasks = [] }) => {
+ const conf = useContext(Config);
return (
<>
{tasks
+ .sort(conf.sorter)
.map((task, index) => (
<Todo task={task} key={index} />
))}
</>
);
};
이것이 바로 우리가 갈고리와 상하문을 사용하여 상태를 쉽게 관리하고 전 세계 응용 프로그램 데이터를 공유하는 방법이다.우리의 응용 프로그램은 지금 이렇게 보인다.
결론
여기서 우리는 다음과 같은 내용을 보았다.
useState
상태 유지useContext
갈고리React 갈고리와 컨텍스트 API는 어떻다고 생각합니까?
댓글로 알려주세요.💬 트위터와
만약 이 문장이 도움이 된다고 생각한다면 다른 사람과 나누십시오🗣
이 블로그에 가입하면 받은 편지함에서 새 게시물을 받을 수 있습니다.
신용
사진은 Filiberto Santillán 에서 Unsplash
최초 2020년 3월 24일 발표https://time2hack.com.
Reference
이 문제에 관하여(ToDo app in React with Hooks&Context API), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/time2hack/todo-app-in-react-with-hooks-context-api-4gd5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(ToDo app in React with Hooks&Context API), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/time2hack/todo-app-in-react-with-hooks-context-api-4gd5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)