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;
이제 새로운 업무 양식의 구성 요소를 살펴보겠습니다.
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>
  );
};
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;
이 상태에서 응용 프로그램은 다음과 같습니다.
 
 현재, 우리의 응용 프로그램을 더욱 맞춤형으로 만들기 위해서, 우리는 약간의 설정을 추가할 것이다.다음과 같습니다.
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.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (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.)