摘要:構建事項列表待辦事項清單是使用廣泛的例子,理由很充分它們是很棒的練習工具。對表單使用我們的表單應該跟蹤的值并在保存提交時執行方法。記得敲哦對事項列表使用我們的事項列表也需要。在中傳遞這個函數我們使用方法把所有不符合的事項保存下來。
原文地址:How to Build a Todo List with React Hooks
React v16.7.0-alpha 引入了鉤子(Hooks)。開心!
什么是鉤子(Hooks)?鉤子是能讓你在沒有用es6類的情況下使用React的狀態, 生命周期鉤子這些特性的功能。
優勢:
隔離狀態相關邏輯,使測試更加容易
不需要使用渲染屬性或者高階組件就可以共享狀態相關邏輯
根據邏輯而不是生命周期鉤子來分離應用程序的關注點
避免ES6類,因為它們很奇怪,不是真正的類,甚至會誤導有經驗的JavaScript開發人員
查看更多:React’s official Hooks intro
不要在生產環境使用寫這篇文章時,鉤子還處于內部測試(alpha)階段。它們的API隨時都可能改變。
我建議你在你的業余項目中體驗鉤子,在它們成為穩定版本之前,不要在線上代碼中使用。
待辦事項清單是使用廣泛的例子,理由很充分——它們是很棒的練習工具。無論你想嘗試任何語言或庫我都推薦使用它。
在這個例子中,我們只實現其中的一小部分功能:
使用Material Design展示事項列表
通過input添加事項
刪除事項
配置這是github和CodeSandbox的地址
git clone https://github.com/yazeedb/react-hooks-todo cd react-hooks-todo npm install
master分支已經實現了這些功能,如果你想自己跟著實現,請切到start分支。
git checkout start
啟動工程
npm start
這個應用應該跑在localhost:3000上,這是初始UI:
我們已經設置了material-ui來給頁面一個專業的外觀,現在我們加入更多功能!
ToDoForm 組件添加一個新文件,src/TodoForm.js。這是初始代碼:
import React from "react"; import TextField from "@material-ui/core/TextField"; const TodoForm = ({ saveTodo }) => { return (); }; export default TodoForm;
通過組件名字,我們就知道它是用來添加事項的,它也就是我們的第一個鉤子。
useState看這段代碼:
import { useState } from "react"; const [value, setValue] = useState("");
useState是一個接收初始狀態(state)返回一個數組的函數。console.log 它吧。
數組的第一個值是你的state現在的值,第二個值是state的更新方法。
所以我們把它們叫做value和setValue, 并使用es6解構賦值對它們進行賦值。
對表單(Form)使用useState我們的表單應該跟蹤input的值并在保存提交時執行saveTodo方法。useState能幫我們實現它。
更新updateForm.js, 這是更新之后的代碼:
import React, { useState } from "react"; import TextField from "@material-ui/core/TextField"; const TodoForm = ({ saveTodo }) => { const [value, setValue] = useState(""); return (); }; export default TodoForm;
回到index.js,引入并且使用這個組件。
... import TodoForm from "./TodoForm"; ... const App = () => { return (); };Todos
現在你在input輸入的值已經可以被打印出來了。(記得敲enter哦)
對事項列表(todos)使用useState我們的事項列表todos也需要state。在index.js中引入useState。初始state應該是空數組。
import React, { useState } from "react"; ... const App = () => { const [todos, setTodos] = useState([]); return ...TodoList組件
建立一個新文件:src/TodoList.js
大部分代碼是來自Material-UI庫的高級組件, 這是更新之后的代碼:
import React from "react"; import List from "@material-ui/core/List"; import ListItem from "@material-ui/core/ListItem"; import ListItemSecondaryAction from "@material-ui/core/ListItemSecondaryAction"; import ListItemText from "@material-ui/core/ListItemText"; import Checkbox from "@material-ui/core/Checkbox"; import IconButton from "@material-ui/core/IconButton"; import DeleteIcon from "@material-ui/icons/Delete"; const TodoList = ({ todos, deleteTodo }) => ({todos.map((todo, index) => (
); export default TodoList;))} { deleteTodo(index); }} >
它接收兩個屬性:
todos: 事項數組,我們遍歷數組,建立每一個事項
deleteTodo: 點擊一個事項的刪除按鈕觸發這個方法,它接收一個參數: 索引,這個索引唯一標識每一個事項。
在index.js中引入這個組件。
... import TodoList from "./TodoList"; import "./styles.css"; const App = () => { ...
并在App方法中使用它:
...添加事項
還是在index.js中,編輯TodoForm的屬性, saveTodo:
{ const trimmedText = todoText.trim(); if (trimmedText.length > 0) { setTodos([...todos, trimmedText]); } }} />
這里我們只是把空格去掉,把新的值添加到todos中。
我們現在可以添加事項了!
清除input框現在添加新的事項后,我們沒有把input清空,這是不好的用戶體驗!
我們只需要在TodoForm.js中做一點小改動,就可以修復它。
現在我們全部完成了!
希望你喜歡!!
謝謝!
作者:Yazeed Bzadough
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99978.html
摘要:新的項目目錄設計如下放置靜態文件業務組件入口文件數據模型定義數據定義工具函數其中數據流實踐的核心概念就是數據模型和數據儲存。最后再吃我一發安利是阿里云業務運營事業部前端團隊開源的前端構建和工程化工具。 本文首發于阿里云前端dawn團隊專欄。 項目在最初應用 MobX 時,對較為復雜的多人協作項目的數據流管理方案沒有一個優雅的解決方案,通過對MobX官方文檔中針對大型可維護項目最佳實踐的...
摘要:屬性如何獲取,是容器性組件負責的事情。所以,不要依賴和的值計算下一個狀態。也可以使用帶用回調函數參數版本的,回調函數中的會保證是最新的。當返回時,組件本次的方法不會被觸發。 容器性組件(container component)和展示性組件(presentational component) 使用React編寫組件時,我們需要有意識地將組件劃分為容器性組件(container compo...
摘要:如何在中使用動畫前端掘金本文講一下中動畫應用的部分。與的快速入門指南推薦前端掘金是非常棒的框架,能夠創建功能強大,動態功能的。自發布以來,已經廣泛應用于開發中。 如何在 Angular 中使用動畫 - 前端 - 掘金本文講一下Angular中動畫應用的部分。 首先,Angular本生不提供動畫機制,需要在項目中加入Angular插件模塊ngAnimate才能完成Angular的動畫機制...
閱讀 1378·2021-11-25 09:43
閱讀 3590·2021-11-10 11:48
閱讀 5143·2021-09-23 11:21
閱讀 1605·2019-08-30 15:55
閱讀 3514·2019-08-30 13:53
閱讀 1242·2019-08-30 10:51
閱讀 874·2019-08-29 14:20
閱讀 1978·2019-08-29 13:11