#### 注意事项
1. 一个文件只能创建一个组件;**子组件标签首字母需大写**;
2. 更新数据只能使用 setData(异步操作),第二个参数选填,可以拿到更新后的数据;
3. 布局单位使用 rpx,750 设计稿是多少就填多少;
4. 已对 loading、error 进行封装,使用时只需在 temp 标签内正常布局;
5. class 使用 className;
6. 变量统一包裹在{}中;
7. 在绑定需要手动触发的事件中,只能在函数里编写,这种写法会默认执行一次;
```
<View onClick={isFlag=true}></View>
```
但在 jsx 中使用匿名函数会占用大量内存空间,所以尽量不要使用匿名函数;
8. 在给子组件传递函数时,函数需用 bind 绑定 this。子组件在事件里给父组件传递参数时,用 bind(this);
9. 给子组件传递 jsx 代码时,只能用**renderHeader**、**renderFooter**;
10. 引用本地图片的时候,只能使用以下方式;
```
import errorImage from './images/icon_error.png'
```
11. 上拉加载用**onReachBottom** () {} 没效果,需要用箭头函数。所以函数统一使用箭头函数;
12. 给 input 做双向数据绑定时,使用 e.detail.value 赋值;
13. **添加一个新组件之后页面不显示,终端也没报错,重启终端解决;**
14. 列表添加无数据判断时,需要使用一个状态传至列表,不能直接根据 length 判断。因为暂无数据的样式会一闪,然后才是列表数据。
15. 上传图片需要指定**header**的**centent-type**,不然 ios 手机有兼容问题;
16. render 渲染中,如果一个对象有一个字段是数组,做容错处理时,只需判断该字段是否存在,不必加 length 的判断,不然偶尔 length 会拿不到值。如:
```
{item.creditSaleInfo && (
<View className='ul'>
{item.creditSaleInfo.map((v, i) => {
return (
<View className='li' key={v.id + i}>
{v}
</View>
);
})}
</View>
)}
```
#### 控制台常见报错:
- Uncaught TypeError: e.trim is not a function
`解决:标签的className不能为空`
- Uncaught TypeError: Cannot read property 'apply' of undefined
```
解决:(1)给子组件传递事件代理程序时,需给props指定默认值
(2)dom中调用了js未定义的方法
```
#### 命令行常见报错:
- sh: taro: command not found
`解决:执行 sudo npm i -g @tarojs/cli --unsafe-perm=true --allow-root`
- TypeError [ERR_INVALID_ARG_TYPE]: The "to" argument must be of type string. Received type object
`解决:把组件的文件夹改个名字就ok了。原因未知`
- const anonymousState\_\_temp = ;
`解决:在return与render之间,给子组件传递dom的内容中存在 {/* <!-- --> */}注释;`
- Cannot read property 'css' of undefined
```
解决:(1)缺少Sass环境
(2)Sass文件里缺少引用资源
```
网友评论