- 微信開發(fā)者工具
- 安裝Node
使用 npm
或者 yarn
全局安裝 @tarojs/cli
# 使用 npm 安裝 CLI
$ npm install -g @tarojs/cli# OR 使用 yarn 安裝 CLI
$ yarn global add @tarojs/cli# OR 安裝了 cnpm,使用 cnpm 安裝 CLI
$ cnpm install -g @tarojs/cli
查看 Taro
全部版本信息
可以使用 npm info
查看 Taro
版本信息,在這里我們可以看到當前最新版本
npm info @tarojs/cli
使用命令創(chuàng)建模板項目:
$ taro init myApp
npm 5.2+
也可在不全局安裝的情況下使用 npx
創(chuàng)建模板項目:
$ npx @tarojs/cli init myApp
使用命令進行編譯,編譯好了之后,下載并打開微信開發(fā)者工具,然后選擇項目根目錄預(yù)覽。愛掏網(wǎng) - it200.com
npm run dev:weapp
安裝 react-redux
,大部分文檔說安裝tarojs/redux
,但是這個包在taro3.x
已經(jīng)消失了,所以這里我們安裝 react-redux
cnpm i --save react-redux
安裝dva-core
和dva-loading
dva-core
封裝了redux
和redux-sage
的一個插件dva-loading
管理頁面的loading
狀態(tài)
cnpm i --save dva-core dva-loading
dva需要掛載所有的models
,所以在src目錄創(chuàng)建models目錄,并在models目錄下的index.js
返回項目中創(chuàng)建的所有model
// src/models/index.js
// dva需要掛載所有的models
import users from '../pages/index/model'export default [users, // users為項目中創(chuàng)建的model
];
model
的結(jié)構(gòu)如下:
// src/pages/index/modelexport default {namespace: 'users',state: {title: 'Hello World'},effects: {},reducers: {save(state, { payload }) {return { ...state, ...payload };},},
};
在src目錄下創(chuàng)建utils
目錄,并在utils目錄里創(chuàng)建dva.js文件
// src/dva.js
import { create } from 'dva-core';
import createLoading from 'dva-loading';let app;
let store;
let dispatch;function createApp(opt){// 創(chuàng)建應(yīng)用,返回dva實例app = create(opt);// 配置插件 createLoading是解決異步加載的過渡問題app.use(createLoading({}));if(!global.registered){// 注冊modelopt.models.forEach(model => app.model(model));}global.registered = true;// 啟動應(yīng)用app.start();store = app._store;app.getStore = () => store;dispatch = store.dispatch;app.dispatch = dispatch;return app;
}
export default {createApp,getDispatch: () => {return app.dispatch;}
}
在入口文件 app.js 里使用 dva.js 返回的方法創(chuàng)建一個 app 獲取 store ,并將 store 掛載到Provider 容器里面
// src/app.jsimport { Component } from 'react'
import dva from './utils/dva'
import { Provider } from 'react-redux'
import models from './models'
import './app.less'const dvaApp = dva.createApp({initialState: {},models
})
const store = dvaApp.getStore();
class App extends Component {componentDidMount () {}componentDidShow () {}componentDidHide () {}componentDidCatchError () {}// this.props.children 是將要會渲染的頁面render () {return Provider store={store}>{this.props.children}/Provider>}
}export default App
以上,完成 dva 配置
驗證配置的 dva 是否可用,在 pages/index/index.jsx
使用 connect 連接 model和組件,并打印this.props
// pages/index/index.jsximport { Component } from 'react'
import { View, Text } from '@tarojs/components'
import { connect } from 'react-redux'
import './index.less'@connect(({users})=>({users
}))
export default class Index extends Component {componentWillMount () { }componentDidMount () { }componentWillUnmount () { }componentDidShow () { }componentDidHide () { }render () {console.log(this.props);return (View className='index'>Text>Hello ChenMengjie!/Text>/View>)}
}
this.props里面若存在model里面的state,則連接成功!
安裝 taro-ui
cnpm i --save taro-ui@3.0.0-alpha.3
引入組件樣式的三種方式:
- 全局引入樣式(JS中),在入口文件引入所有樣式:
import 'taro-ui/dist/style/index.scss'
- 全局引入樣式(CSS中)
@import "~taro-ui/dist/style/index.scss";
- 按需引入,在頁面樣式或全局樣式中
import
需要的組件樣式
@import "~taro-ui/dist/style/components/button.scss";
// src/app.jsimport { Component } from 'react'
import { Provider } from 'react-redux'
import 'taro-ui/dist/style/index.scss'
import dva from './utils/dva'
import models from './models'
import './app.less'const dvaApp = dva.createApp({initialState: {},models
})
const store = dvaApp.getStore();
class App extends Component {componentDidMount () {}componentDidShow () {}componentDidHide () {}componentDidCatchError () {}// this.props.children 是將要會渲染的頁面render () {return Provider store={store}>{this.props.children}/Provider>}
}export default App
// src/pages/index/index.jsximport { Component } from 'react'
import { View, Text } from '@tarojs/components'
import { AtTabBar } from 'taro-ui'
import { connect } from 'react-redux'
import './index.less'@connect(({users})=>({users
}))
class Index extends Component {componentWillMount () { }componentDidMount () { }componentWillUnmount () { }componentDidShow () { }componentDidHide () { }render () {console.log(this.props);return (View className='index'>Text>Hello world!/Text>AtTabBar fixedtabList={[{title: '首頁', iconType: 'home'},{title: '我的', iconType: 'user'}]}/>/View>)}
}
export default Index;
Taro 官網(wǎng)