基本书写
组件创建
Taro 中组件以类的形式进行创建,并且单个文件中只能存在单个组件
代码缩进
使用两个空格进行缩进,不要混合使用空格与制表符作为缩进
import Taro, { Component } from '@tarojs/taro'
import { View, Text } from '@tarojs/components'
class MyComponent extends Component {
render () {
return (
<View className='test'> // ✓ 正确
<Text>12</Text> // ✗ 错误
</View>
)
}
}
单引号
JSX 属性均使用单引号
import Taro, { Component } from '@tarojs/taro'
import { View, Input } from '@tarojs/components'
class MyComponent extends Component {
render () {
return (
<View className='test'> // ✓ 正确
<Text className="test_text">12</Text> // ✗ 错误
</View>
)
}
}
对齐方式
多个属性,多行书写,每个属性占用一行,标签结束另起一行
// bad
<Foo superLongParam='bar'
anotherSuperLongParam='baz' />
// good
<Foo
superLongParam='bar'
anotherSuperLongParam='baz'
/>
// 如果组件的属性可以放在一行就保持在当前一行中
<Foo bar='bar' />
// 多行属性采用缩进
<Foo
superLongParam='bar'
anotherSuperLongParam='baz'
>
<Quux />
</Foo>
空格使用
终始在自闭合标签前面添加一个空格
// bad
<Foo/>
// very bad
<Foo />
// bad
<Foo
/>
// good
<Foo />
属性书写
属性名称始终使用驼峰命名法
// bad
<Foo
UserName='hello'
phone_number={12345678}
/>
// good
<Foo
userName='hello'
phoneNumber={12345678}
/>
JSX 与括号
用括号包裹多行 JSX 标签
// bad
render () {
return <MyComponent className='long body' foo='bar'>
<MyChild />
</MyComponent>
}
// good
render () {
return (
<MyComponent className='long body' foo='bar'>
<MyChild />
</MyComponent>
);
}
// good
render () {
const body = <div>hello</div>
return <MyComponent>{body}</MyComponent>
}
标签
当标签没有子元素时,始终时候自闭合标签
// bad
<Foo className='stuff'></Foo>
// good
<Foo className='stuff' />
如果控件有多行属性,关闭标签要另起一行
// bad
<Foo
bar='bar'
baz='baz' />
// good
<Foo
bar='bar'
baz='baz'
/>
书写顺序
在 Taro 组件中会包含类静态属性、类属性、生命周期等的类成员,其书写顺序最好遵循以下约定(顺序从上至下)
- static 静态方法
- constructor
- componentWillMount
- componentDidMount
- componentWillReceiveProps
- shouldComponentUpdate
- componentWillUpdate
- componentDidUpdate
- componentWillUnmount
- 点击回调或者事件回调 比如
onClickSubmit()
或者onChangeDescription()
- render