创建taro模板项目
需要用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 @tarojs/cli
查看 Taro 版本信息,在这里你可以看到当前最新版本
项目初始化
使用 taro init myApp
可以创建初始化项目
npm 5.2+ 也可在不全局安装的情况下使用 npx @tarojs/cli init myApp
创建模板项目
编译运行
使用npm run dev:weapp
命令进行编译,编译好了之后,下载并打开微信开发者工具,然后选择项目根目录进行预览。
以上过程可以到Taro官网上去看。
配置dva
安装 react-redux
,有很多博客上面说的是安装tarojs/redux
,但是这个包在taro3.x已经没有了,所以这里安装 react-redux
。
cnpm i --save react-redux
安装dva-core
和dva-loading
cnpm i --save dva-core dva-loading
dva需要挂载所有的models,所以在src目录创建models目录,并在models目录下的index.js返回项目中创建的所有model
// src/models/index.js
import users from '../pages/index/model'
export default [
users,
];
users为项目中创建的model
// src/pages/index/model
export default {
namespace: 'users',
state: {
title: 'Hello World'
},
effects: {},
reducers: {
save(state, { payload }) {
return { ...state, ...payload };
},
},
};
在src目录下创建utils目录,并在utils目录里创建dva.js文件
// src/dva.js
import { create } from 'dva-core';
import createLoading from 'dva-loading';
let app;
let store;
let dispatch;
function createApp(opt){
app = create(opt);
app.use(createLoading({}));
if(!global.registered){
opt.models.forEach(model => app.model(model));
}
global.registered = true;
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返回的方法创建一个app获取store,并将store挂载到Provider容器里面
// src/app.js
import { 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.jsx
import { 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 world!</Text>
</View>
)
}
}
this.props里面存在model里面的state,连接成功!
引入taro-ui
使用 cnpm i --save taro-ui@3.0.0-alpha.3
安装 taro-ui
引入组件样式的三种方式:
全局引入样式(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.js
import { 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.jsx
import { 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
fixed
tabList={[
{title: '首页', iconType: 'home'},
{title: '我的', iconType: 'user'}
]}
/>
</View>
)
}
}
export default Index;
效果如下:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。