国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用React實現一個最最最簡單的TodoList

Forest10 / 1941人閱讀

摘要:初學,擼一個熟悉熟悉基本語法,只有最簡單最簡單的功能。引入這個之后,我們可以直接使用一些簡單的組件,比如等,我們可以更加注重業務邏輯的實現。

初學React,擼一個TodoList熟悉熟悉基本語法,只有最簡單最簡單的功能。

如上圖所示,是一個最簡單的TodoList的樣子了,我們應該怎樣把它拆成一個個的組件呢?

在之前看來,可能就是這樣一個HTML結構:

React的核心思想是:封裝組件。

我們也可以按照這個思路來進行組件設計

組件設計

從小到大,從內到外 ~

我是這樣進行設計的。

除去按鈕,input這些之外,

  • 是HTML中最小的元素,我們可以先每一個
  • 當成是一個最小的組件,也就是圖中橙色框的部分,它對應著每一條內容,我們先把它命名為TodoItem吧。

  • 的父級元素是
      ,那就把它看作一個組件唄,圖中位于上方的藍色部分,命名為TodoList

      恩,此時Todo內容的展示組件已經是夠的了,我們再來加一個添加Todo內容的組件AddTodoItem吧,命名貌似有點丑- -,圖中位于下方的藍色部分。

      最后就是最外層的紅色部分了,它就是整個app的主體部分,包含著其它小組件,命名為TodoBox

      ok,暫時就這幾個小組件 ~

      然我們開始愉快的擼代碼吧 ~

      代碼部分 Index

      先看看入口程序,很簡單。

      var React = require("react");
      var ReactDOM = require("react-dom");
      import TodoBox from "./components/todobox";
      import "./../css/index.css";
      
      export default class Index extends React.Component {
        constructor(){
          super();
        };
        render() {
          return (
              
          );
        }
      }
      
      ReactDOM.render(,document.getElementById("example"))
      TodoItem

      讓我們想想啊,對于每一條內容來說,需要什么呢?

      一個確認是否完成的checkbox [ ]

      一條內容text

      一個刪除button

      zzzzzz.....其他的暫時先不加了~

      那不是太簡單了 ~

    • 找工作啊找工作啊
    • 不不不,我們現在是在寫React,要這樣:

      import React from "react";
      import {Row, Col, Checkbox, Button} from "antd";
      
      export default class TodoItem extends React.Component {
        constructor(props) {
          super(props)
          this.toggleComplete = this.toggleComplete.bind(this)
          this.deleteTask = this.deleteTask.bind(this)
        }
        toggleComplete() {
          this.props.toggleComplete(this.props.taskId)
        }
        deleteTask() {
          this.props.deleteTask(this.props.taskId)
        }
        render() {
          let task = this.props.task
          let itemChecked
          if (this.props.complete === "true") {
            task = {task}
            itemChecked = true
          } else {
            itemChecked = false
          }
          return (
            
    • {task}
    • ) } }

      import {Row, Col, Checkbox, Button} from "antd"是引入Ant Design。

      我們采用 React 封裝了一套 Ant Design 的組件庫,也歡迎社區其他框架的實現版本。

      引入這個之后,我們可以直接使用一些簡單的UI組件,比如Row,Col,Checkbox,Button等,我們可以更加注重業務邏輯的實現。

      TodoList

      接下來就是拿一個

        把item包起來唄:

        import React from "react";
        import TodoItem from "./todoitem";
        export default class TodoList extends React.Component{
          constructor(props) {
            super(props);
          }
          render(){
            var taskList=this.props.data.map(listItem=>
              
            )
            return(
              
          {taskList}
        ) } }
        AddTodoItem

        添加內容這個組件也比較簡單,就只需要一個input和一個button即可:

        import React from "react";
        import ReactDOM from "react-dom";
        import {Row, Col, Form, Input, Button,notification } from "antd";
        export default class AddTodoItem extends React.Component {
          constructor(props) {
            super(props)
            this.saveNewItem = this.saveNewItem.bind(this)
          }
          saveNewItem(e) {
            e.preventDefault()
            let element = ReactDOM.findDOMNode(this.refs.newItem)
            let task = element.value
            if (!task) {
              notification.open({
                description: "Todo內容不得為空!",
            });
            } else {
              this.props.saveNewItem(task)
              element.value = ""
            }
          }
          render() {
            return (
              
        ) } }
        TodoBox

        我們的小組件已經都實現了,拿一個大box包起來唄 ~

        import React from "react";
        import TodoList from "./todolist";
        import AddTodoItem from "./addtodoitem";
        import {Button, Icon, Row, Col} from "antd";
        export default class TodoBox extends React.Component {
          constructor(props) {
            super(props)
            this.state = {
              data: [
                {
                  "id": "1",
                  "task": "做一個TodoList Demo",
                  "complete": "false"
                }, {
                  "id": "2",
                  "task": "學習ES6",
                  "complete": "false"
                }, {
                  "id": "3",
                  "task": "Hello React",
                  "complete": "true"
                }, {
                  "id": "4",
                  "task": "找工作",
                  "complete": "false"
                }
              ]
            }
            this.handleToggleComplete = this.handleToggleComplete.bind(this);
            this.handleTaskDelete = this.handleTaskDelete.bind(this);
            this.handleAddTodoItem = this.handleAddTodoItem.bind(this);
          }
          generateGUID() {
            return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
              var r = Math.random() * 16 | 0,
                v = c == "x" ? r : (r & 0x3 | 0x8)
              return v.toString(16)
            })
          }
          handleToggleComplete(taskId) {
            let data = this.state.data;
            for (let item of data) {
              if (item.id === taskId) {
                item.complete = item.complete === "true" ? "false" : "true"
              }
            }
            this.setState({data})
          }
          handleTaskDelete(taskId) {
            let data = this.state.data
            data = data.filter(task => task.id !== taskId)
            this.setState({data})
          }
          handleAddTodoItem(task) {
            let newItem = {
              id: this.generateGUID(),
              task,
              complete: "false"
            }
            let data = this.state.data
            data = data.concat([newItem])
            this.setState({data})
          }
          render() {
            return (
              

        React TodoList

        ) } }

        注意:

        通過props傳遞子組件需要的值和方法

        傳遞方法時一定要bind(this),不然內部this會指向不正確

        源碼

        完整的Demo代碼在這:https://github.com/axuebin/react-todolist

        原文地址:http://axuebin.com/blog/2017/...

        文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

        轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84384.html

        相關文章

        • 如何優雅設計 React 組件

          摘要:盡管現在的已不再那么流行,但的設計思想還是非常值得致敬和學習的,特別是的插件化。那么,如何解決我們回顧下的生命周期,父組件傳遞到子組件的的更新數據可以在中獲取。當然,如何設計取決于你自己的項目,正所謂沒有最好的, 作者:曉冬本文原創,轉載請注明作者及出處 如今的 Web 前端已被 React、Vue 和 Angular 三分天下,一統江山十幾年的 jQuery 顯然已經很難滿足現在的開...

          Anchorer 評論0 收藏0
        • React + Ramda: 函數式編程嘗鮮

          摘要:每當的值改變后,我們只需要重新調用方法即可現在,讓我們來實現一個類似風格的歸約函數,以不斷的遞增。歸約函數是不允許修改當前狀態的,所有最簡單的實現方式就是。 原文:Functional Components with React stateless functions and Ramda 閱讀本文需要的知識儲備: 函數式編程基本概念(組合、柯里化、透鏡) React 基本知識(組件、...

          tomener 評論0 收藏0
        • 通過 React + Mobx 實現簡單 TodoList

          摘要:子組件中通過就可以拿到上的數據了,實現了從父組件子組件的數據傳遞。當前狀態改變時要發生的副作用。通過裝飾器調用的函數進行使用。理想情況下,大部分組件都應該是無狀態組件,僅通過獲得數據。通過調用中的改變狀態。 Todo-list 這是一個用來初步了解如何通過 React + Mobx 構建應用的 DEMO,通過 Webpack 進行打包。技術棧: React + Mobx + React...

          philadelphia 評論0 收藏0
        • 實例講解react+react-router+redux

          摘要:而函數式編程就不一樣了,這是模仿我們人類的思維方式發明出來的。數據流在中,數據的流動是單向的,即從父節點傳遞到子節點。數據流嚴格的單向數據流是架構的設計核心。 前言 總括: 本文采用react+redux+react-router+less+es6+webpack,以實現一個簡易備忘錄(todolist)為例盡可能全面的講述使用react全家桶實現一個完整應用的過程。 代碼地址:Re...

          RiverLi 評論0 收藏0

        發表評論

        0條評論

        Forest10

        |高級講師

        TA的文章

        閱讀更多
        最新活動
        閱讀需要支付1元查看
        <