用Taro做個微信小程式Todo, 小白工作記錄

来源:https://www.cnblogs.com/mengdd/archive/2020/04/20/mini-program-todo-using-taro.html
-Advertisement-
Play Games

本篇本著學習的目的, 用Taro做一個簡單的微信小程式. 代碼在這裡: https://github.com/mengdd/mini-program-todo ...


微信小程式框架: Taro

做微信小程式的框架, 幾個比較主流的:

前兩者都是Vue風格的, Taro是React的.

本篇本著學習的目的, 用Taro做一個簡單的小程式.
代碼在這裡: https://github.com/mengdd/mini-program-todo
這是預覽圖:
todo list

本文地址: https://www.cnblogs.com/mengdd/p/mini-program-todo-using-taro.html

背景:
一直做Android開發, 最近想把其他各種技術都擼一擼, 拓展一下視野.
之前練過微信小程式原生開發的例子, 基本上只知道個大概, 翻書馬冬梅, 合書馬什麼梅?
所以這次用框架了, 覺得還是要有個輸出, 這樣印象深刻一些.

所以本文是從一個小白的角度, 手把手做練習的.

Taro程式環境

這部分參考:

要有node環境, 推薦用nvm來管理.

需要安裝CLI工具:

npm install -g @tarojs/cli

創建項目並運行

創建項目

創建模板項目:

taro init myApp

在這個階段會有一些問題要回答.

* 請輸入項目介紹! My awesome project blablabla.
* 是否需要使用 TypeScript ? Yes
* 請選擇 CSS 預處理器(Sass/Less/Stylus) Sass
* 請選擇模板 預設模板

完了之後會自動安裝依賴:

npm install

然後就成功啦!

運行

Taro需要運行不同的命令, 將Taro代碼編譯成不同端的代碼, 然後在對應的開發工具中查看效果.

這裡僅說微信小程式. 還是需要微信開發者工具:
https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

import這個項目就行了.

開發前微信開發者工具的項目設置要註意:

需要設置關閉ES6轉ES5功能, 開啟可能報錯.
需要設置關閉上傳代碼時樣式自動補全, 開啟可能報錯.
需要設置關閉代碼壓縮上傳, 開啟可能報錯.

這些預設都是關閉的.

微信小程式的編譯預覽及打包:

npm script

$ npm run dev:weapp
$ npm run build:weapp

或者:

$ taro build --type weapp --watch
$ taro build --type weapp

加上--watch會監聽文件修改, 去掉會對代碼進行壓縮打包.

運行編譯命令之後就可以在微信開發者工具中預覽了. 是顯示一個Hello World.

項目結構

因為創建項目的時候用了TypeScript, 所以項目結構是這樣的:

├── dist                   編譯結果目錄
├── config                 配置目錄
|   ├── dev.js             開發時配置
|   ├── index.js           預設配置
|   └── prod.js            打包時配置
├── src                    源碼目錄
|   ├── pages              頁面文件目錄
|   |   ├── index          index頁面目錄
|   |   |   ├── index.scss index頁面樣式
|   |   |   └── index.tsx  index頁面邏輯
|   ├── app.scss           項目總通用樣式
|   ├── app.tsx            項目入口文件
|   └── index.html          
└── package.json

如果需要創建組件, 可以在src下創建component目錄來統一存放組件.

"Hello world!"就在index.tsx中.

IDE

關於IDE:
我發現用微信開發者工具是打不開這些尾碼名為scsstsx的文件的.
微信開發者工具只能用來預覽.

後來用了Intellij, 是能查看文件了,
但是開始寫代碼之後, 發現沒有自動提示, 也沒有自動格式化工具.

又下了個VS CODE:

brew cask install visual-studio-code

格式化的快捷鍵是:
Shift + Alt + F.

後來我在Text Editor設置里勾選了Format On Save.

編寫代碼

Step 1: 靜態頁面顯示

先弄幾個數據靜態顯示一下:

export default class Index extends Component {
  config: Config = {
    navigationBarTitleText: '首頁'
  }

  constructor(props) {
    super(props)
    this.state = {
      list: ['get up', 'eat breakfast', 'study',]
    }
    inputVal: ''
  }

  render() {
    let { list, inputVal } = this.state

    return (
      <View className='index'>
        <View className='list_wrap'>
          <Text>Todo List</Text>
          {
            list.map((item, index) => {
              return <View>
                <Text>{index + 1}.{item}</Text>
              </View>
            })
          }
        </View>
      </View>
    )
  }
}

然後命令行運行:

taro build --type weapp --watch

就會直接顯示出來結果. 之後的修改也是隨時呈現.

這裡IDE報告兩個TypeScript的問題:

Property 'list' does not exist on type 'Readonly<{}>'

和:

Property 'inputVal' does not exist on type 'Index'.

按照這裡的方法修改的:

interface MyProps {
}

interface MyState {
  list: Array<string>;
  inputVal: string;
}

export default class Index extends Component<MyProps, MyState> {
//...
}

代碼中設置值的時候調用this.setState().

Step 2: 添加和刪除項目

加上輸入框, 添加和刪除按鈕的對應方法.
完整代碼:

interface MyProps {
}

interface MyState {
  list: Array<string>;
  inputVal: string;
}

export default class Index extends Component<MyProps, MyState> {
  config: Config = {
    navigationBarTitleText: '首頁'
  }

  constructor(props) {
    super(props)
    this.state = {
      list: ['get up', 'eat breakfast', 'study',],
      inputVal: ''
    }

  }

  addItem() {
    let { list } = this.state
    const inputVal = this.state.inputVal

    if (inputVal == '') return
    else {
      list.push(inputVal)
    }
    this.setState({
      list,
      inputVal: ''
    })
  }

  removeItem(index) {
    let { list } = this.state
    list.splice(index, 1)
    this.setState({
      list
    })
  }

  inputHandler(e) {
    this.setState({ inputVal: e.target.value })
  }

  render() {
    let { list, inputVal } = this.state

    return (
      <View className='index'>
        <Input className='input' type='text' value={inputVal} onInput={this.inputHandler.bind(this)} />
        <Text className='add' onClick={this.addItem.bind(this)}>添加</Text>
        <View className='list_wrap'>
          <Text>Todo List</Text>
          {
            list.map((item, index) => {
              return <View className='list_item'>
                <Text>{index + 1}.{item}</Text>
                <Text className='del' onClick={this.removeItem.bind(this, index)}>刪除</Text>
              </View>
            })
          }
        </View>
      </View>
    )
  }
}

Step 3: 樣式調整

用了這裡面的樣式: https://juejin.im/book/5b73a131f265da28065fb1cd

然後企圖調整button的對齊. (CSS不太擅長, 請輕拍, 請指教.)

.input {
    display: inline-block;
    margin: 32px;
    border: 1px solid #666;
    width: 65%;
    vertical-align: middle;
}
.list_wrap {
    padding: 32px;
}
.list_item {
    margin: 20px 0;
}
.add,
.del {
    display: inline-block;
    width: 120px;
    height: 60px;
    margin: 0 10px;
    padding: 0 10px;
    font-size: 22px;
    line-height: 60px;
    text-align: center;
    border-radius: 10px;
    box-sizing: border-box;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    justify-content: center;
    vertical-align: middle;
}
.add {
    background-color: #5c89e4;
    color: #fff;
    border: 1px solid #5c89e4;
}
.del {
    background-color: #fff;
    color: #5c89e4;
    border: 1px solid #5c89e4;
    position: absolute;
    right: 32px;
}

Taro命令

快速生成新的頁面文件:

Taro create --name [頁面名稱] 

參考

最後, 歡迎關註微信公眾號: 聖騎士Wind
微信公眾號


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 好幾年前寫了一篇《SSIS利用Microsoft Connector for Oracle by Attunity組件進行ETL!》,IT技術真是日新月異,這種方式對於新的SQL SERVER 資料庫版本已不適用了,比如SQL SERVER 2016 的SSIS不需要安裝任何插件就可以抽取Share ...
  • 引用地址:https://blog.csdn.net/weixin_34143774/article/details/89561946 請以原文為主,引用註明出處。問題:今天公司進行軟體測評,在測評期間,測評人員問起PostgreSQL登錄失敗導致用戶鎖定的次數,密碼輸錯幾次賬戶會被鎖定?網上查了一... ...
  • 前言 文章首發於微信公眾號【碼猿技術專欄】:天天用Redis,持久化方案有哪些你知道嗎? Redis目前已經成為主流的記憶體資料庫了,但是大部分人僅僅是停留在會用的階段,你真的瞭解Redis內部的工作原理嗎? 今天這篇文章將為大家介紹Redis持久化的兩種方案,文章將會從以下五個方面介紹: 什麼是RD ...
  • 近日Kafka發佈了最新版本 2.5.0,增加了很多新功能: 下載地址:https://kafka.apache.org/downloads 2.5.0 對TLS 1.3的支持(預設為1.2) 引入用於 Kafka Streams 的 Co groups 用於 Kafka Consumer 的增量 ...
  • 一、什麼是觸發器 資料庫觸發器是一個與表相關聯的,存儲的PL/SQL 語句。每當一個特定的數據操作語句(insert update delete)在指定的表上發出時,Oracle自動執行觸發器中定義的語句序列。 觸發器的應用場景如下: 複雜的安全性檢查 數據的確認 資料庫審計 數據的備份和審計 二、 ...
  • 什麼是統計數據統計數據怎麼存儲兩種存儲方式:存儲形式:存儲的信息如何更新統計數據NULL 值如何統計參考文檔什麼是統計數據MySQL 為了制定執行計劃收集表的相關信息,如索引行數,索引基數(不同值的數量),占用頁面數等等。這些信息被稱為統計數據。同一條 sql 語句,在不同的數據量級下,不同的索引結... ...
  • 1、前言 Hello,各位小伙伴,又見面了,迴首過去, "RxHttp" 就要迎來一周年生日了(19年4月推出),這一年,走過來真心....真心不容易,代碼維護、寫文章、寫文檔等等,經常都是乾到零點之後,也是我首次花費大部分業餘時間來維護一個開源項目,全程一個人維護,要知道,網路請求庫不同於其它開源 ...
  • 今天課上學習了Spinner,做了一個很簡單的程式,現將代碼和截圖放在這裡供大家參考。 activity_spinner.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schema ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...