1. 程式人生 > >用Taro做個微信小程式Todo, 小白工作記錄

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

微信小程式框架: Taro

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

  • 官方的WePY: https://tencent.github.io/wepy/document.html#/
  • 美團的mpvue: http://mpvue.com/mpvue/#-html
  • 京東的Taro: https://taro.aotu.io/

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

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

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

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

Taro程式環境

這部分參考:

  • 官方文件: https://nervjs.github.io/taro/docs/README.html
  • Getting Started:
    https://nervjs.github.io/taro/docs/GETTING-STARTED.html

要有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 [頁面名稱] 

參考

  • taro github
  • awesome taro
  • 微信開發者工具
  • 掘金小冊: Taro 多端開發實現原理與專案實戰

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

相關推薦

Taro程式Todo, 工作記錄

微信小程式框架: Taro 做微信小程式的框架, 幾個比較主流的: 官方的WePY: https://tencent.github.io/wepy/document.html#/ 美團的mpvue: http://mpvue.com/mpvue/#-html 京東的Taro: https://taro.ao

Python秒回器,再也不怕捱罵啦!

在每次你玩遊戲玩的正嗨的時候,你女票突然發訊息給你怎麼辦?到底是該拋棄對於去回女票的訊息,還是選擇遊戲不理女票呢?假如你選擇了第二種,估計不是搓衣板,就是口紅、包包、衣服伺候了,所以在這種時候,你需要一個幫你秒回信息的神器了。   有想學Python或者對Python感興趣的老

春哥教你支付商戶號如何綁定多公眾號及程序

img 線下 tex 如何 創建 微信公眾 實現 alt mark 大家在使用微信支付的時候都知道微信支付賬號要和對應的公眾號、小程序有對應的綁定關系才可以使用的。今天春哥技術博客就給大家總結一下這方面的知識。 背景 微信支付交易發起依賴於公眾號、小程序、移動應用(即A

500行程式碼,教你python寫飛機大戰

這幾天在重溫微信小遊戲的飛機大戰,玩著玩著就在思考人生了,這飛機大戰怎麼就可以做的那麼好,操作簡單,簡單上手。 幫助蹲廁族、YP族、飯圈女孩在無聊之餘可以有一樣東西讓他們振作起來!讓他們的左手 / 右手有節奏有韻律的朝著同一個方向來回移動起來! 這是史詩級的發明,是濃墨重彩的一筆,是…… 在一陣抽搐後,我

Java “你畫手機猜”的遊戲

> 本文適合有 Java 基礎的人群 ![](https://img2020.cnblogs.com/blog/759200/202009/759200-20200923184426141-1352914100.gif) 作者:**DJL-Lanking** HelloGitHub 推出的[《講

程式》必要的2條件(企業和https)

小程式,類似公眾號功能但不一樣的體驗,不是APP勝似APP。 微信還沒正式釋出但已經預熱很猛烈。 公眾開發時 微信提供了開發者工具,現在升級就可以開發小程式了,所以大家都可以自己做個demo了。但是想釋出 或用 高階功能必須 得註冊 ,得有APPId 下面

不管什麼手機,擁有這4程式就無敵了!

如果你知道微信,還不知道微信小程式就out啦,自從微信小程式跳一跳火了之後,帶動了不少小程式的發展,其中,這4個微信小程式非常強大,無需下載,無需安裝,搜一搜就能用啦,不管你是什麼手機,擁有就無敵了。 1. 最近文件隨身   一個分享文件的工具,是我偶然間發現的,可

130程式原始碼資源免費領取

為了感恩大家長久以來的關注和支援,小編準備了一些福利,整理了包含前端,Java,產品經理,微信小程式,Python,網站原始碼,Android應用視訊教程,微信公眾平臺開發教程及材料等資源合集大放送。 重要的話說三遍,感恩大回饋,超有價值的學習資料免費送!免費領取! 如果需要學習視訊,歡迎關

130程式原始碼demo,拿來就可以跑起來的程式

微信小程式未來也將會是個趨勢,在現在這個時代,安卓手機使用者寧願先從微信裡面去搜一下是否有這個軟體,這個軟體是否值得安裝也不願意開啟手機應用商店去下載應用。 其中有以下兩個主要原因: 第一,使用者的惰性警惕性越來越高,現在的手機APP動不動就要獲取使用者的全部許可權,本

1-程式開發(安裝軟體和執行第一程式)

https://developers.weixin.qq.com/miniprogram/dev/                     我的   &nbs

開發者工具--開啟程式元件vant Weapp示例

瀏覽器搜尋:https://github.com/youzan/vant-weapp 1.下載Vant Weapp元件, 2.開啟微信開發者工具,把vant-weapp/example目錄新增進去, 3.把dist目錄複製到example目錄下,在開發者工具開啟example目錄就可以預

編寫我的第一程式

最近在學習微信小程式也算是入門級別的,於是乎跟著學習了下,下面簡單的展示下自己做的第一個小程式介面                                                                            簡單介紹下,初次使用微

我的第一程式

今年國慶假期的時候,在家裡帶寶寶。想下載一個哄寶寶玩的遊戲,從 App Store上搜索了一圈,發現評分高的基本上都是收費的。因為App Store上有限免機制,所以就萌發了做一款關注限免應用的小程式。 學習調研 4月份的時候,幫助同事開發了一款小程式,因為當時時間比較急,就用了第三方快速開發框架 mpvue

600多程式原始碼涵蓋各個行業大部分帶後臺持續更新中

    今天把本人花費一個月左右整理的600多款小程式原始碼釋出出來,以後每個月還會持續更新,很大一部分都帶有後臺原始碼幷包含有小程式上線教程,幫你分分鐘上線自己的小程式,下面我們來看看目錄截圖,最後面會把原始碼目錄以文字的形式匯出來,這樣你可以在網頁上搜索單個想要的小程式原

給和我一樣的初學者分享程式.WXSS使用background引入背景圖的辦法

      因為專案的緣故,我最近開始學小程式。初入小程式就遇見了個問題,就是在引入背景圖片的時候會出現,下圖的錯誤:          看了錯誤後才發現,原來微信小程式在引入背景圖時需要將圖片格式轉一下,並不是說是我的路徑出現問題了。為了將圖片格式專成base64。現在給所

【好福利】分享100多程式原始碼

2017年1月9號,中國網際網路世界發生了一件重要事件:凌晨0點,微信小程式正式和我們大夥見面了,從此以後,我們都可以開發屬於我們自己的微信小程式了。 這不,微信小程式正式和大家一見面,市面上就有很多開源的微信小程式了,這裡給大家奉上100多個微信小程式原始碼

完全零基礎一個程式記錄~

作為一隻數學系大二的小菜喵,之前聽過一個微信小程式的產品展示,覺得微信小程式還挺好玩的,不過自己沒有接觸過前端開發,很多東西都在自己摸索,把一些有意思的東西記錄下來,以備以後查閱,也給一些非科班的程式猿們在掙扎中提供一點借鑑~ 微信小程式對新手非常友好,如

4分鐘手把手教你做出第一程式

關於如何開發自己第一個程式,上一篇我釋出了圖文版本,有的閣友自己說沒能實現,我也擔心看圖實在會讓大家感覺不直觀,所以我花了點時間做了一個教學視訊,希望能繼續幫助到對微信小程式感興趣的人。用了愛剪輯稍微做

動手寫第一程式

微信小程式開放公測了,目前公測面向的使用者主要是政府、企業、組織,暫時不對個人開發者開放註冊。 註冊請前往微信公眾平臺註冊 微信小程式註冊 下載微信web開發者工具並開啟quickStart工程(提供獲取當前登入賬號的功能),可以看到編輯和除錯的介面

atomatom-beautify格式化程式程式碼

公司硬性要求程式碼格式問題,我是用atom編寫的微信小程式程式碼,這就蛋疼了,百度的atom-beautify最多隻支援格式化js和json的程式碼,查了半天沒有找到解決辦法,就想把外掛改一下,因為wxml和wxss與xml和css沒什麼區別,就想著能不能把wxml和wxs