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

資訊專欄INFORMATION COLUMN

用React實(shí)現(xiàn)一個最最最簡單的TodoList

Forest10 / 1943人閱讀

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

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

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

在之前看來,可能就是這樣一個HTML結(jié)構(gòu):

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

我們也可以按照這個思路來進(jìn)行組件設(shè)計(jì)

組件設(shè)計(jì)

從小到大,從內(nèi)到外 ~

我是這樣進(jìn)行設(shè)計(jì)的。

除去按鈕,input這些之外,

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

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

      恩,此時Todo內(nèi)容的展示組件已經(jīng)是夠的了,我們再來加一個添加Todo內(nèi)容的組件AddTodoItem吧,命名貌似有點(diǎn)丑- -,圖中位于下方的藍(lán)色部分。

      最后就是最外層的紅色部分了,它就是整個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

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

      一個確認(rèn)是否完成的checkbox [ ]

      一條內(nèi)容text

      一個刪除button

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

      那不是太簡單了 ~

    • 找工作啊找工作啊
    • 不不不,我們現(xiàn)在是在寫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 的組件庫,也歡迎社區(qū)其他框架的實(shí)現(xiàn)版本。

      引入這個之后,我們可以直接使用一些簡單的UI組件,比如Row,Col,Checkbox,Button等,我們可以更加注重業(yè)務(wù)邏輯的實(shí)現(xiàn)。

      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

        添加內(nèi)容這個組件也比較簡單,就只需要一個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內(nèi)容不得為空!",
            });
            } else {
              this.props.saveNewItem(task)
              element.value = ""
            }
          }
          render() {
            return (
              
        ) } }
        TodoBox

        我們的小組件已經(jīng)都實(shí)現(xiàn)了,拿一個大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": "學(xué)習(xí)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),不然內(nèi)部this會指向不正確

        源碼

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

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

        文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

        轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/84384.html

        相關(guān)文章

        • 如何優(yōu)雅設(shè)計(jì) React 組件

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

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

          摘要:每當(dāng)?shù)闹蹈淖兒螅覀冎恍枰匦抡{(diào)用方法即可現(xiàn)在,讓我們來實(shí)現(xiàn)一個類似風(fēng)格的歸約函數(shù),以不斷的遞增。歸約函數(shù)是不允許修改當(dāng)前狀態(tài)的,所有最簡單的實(shí)現(xiàn)方式就是。 原文:Functional Components with React stateless functions and Ramda 閱讀本文需要的知識儲備: 函數(shù)式編程基本概念(組合、柯里化、透鏡) React 基本知識(組件、...

          tomener 評論0 收藏0
        • 通過 React + Mobx 實(shí)現(xiàn)簡單 TodoList

          摘要:子組件中通過就可以拿到上的數(shù)據(jù)了,實(shí)現(xiàn)了從父組件子組件的數(shù)據(jù)傳遞。當(dāng)前狀態(tài)改變時要發(fā)生的副作用。通過裝飾器調(diào)用的函數(shù)進(jìn)行使用。理想情況下,大部分組件都應(yīng)該是無狀態(tài)組件,僅通過獲得數(shù)據(jù)。通過調(diào)用中的改變狀態(tài)。 Todo-list 這是一個用來初步了解如何通過 React + Mobx 構(gòu)建應(yīng)用的 DEMO,通過 Webpack 進(jìn)行打包。技術(shù)棧: React + Mobx + React...

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

          摘要:而函數(shù)式編程就不一樣了,這是模仿我們?nèi)祟惖乃季S方式發(fā)明出來的。數(shù)據(jù)流在中,數(shù)據(jù)的流動是單向的,即從父節(jié)點(diǎn)傳遞到子節(jié)點(diǎn)。數(shù)據(jù)流嚴(yán)格的單向數(shù)據(jù)流是架構(gòu)的設(shè)計(jì)核心。 前言 總括: 本文采用react+redux+react-router+less+es6+webpack,以實(shí)現(xiàn)一個簡易備忘錄(todolist)為例盡可能全面的講述使用react全家桶實(shí)現(xiàn)一個完整應(yīng)用的過程。 代碼地址:Re...

          RiverLi 評論0 收藏0

        發(fā)表評論

        0條評論

        Forest10

        |高級講師

        TA的文章

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