# learnIceHard
**Repository Path**: mrstack/learnicehard
## Basic Information
- **Project Name**: learnIceHard
- **Description**: 笨办法学 “飞冰”
- **Primary Language**: JavaScript
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2018-05-16
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# LearnIceHard
## 项目介绍
从组件部分开始学习飞冰框架,并回顾 React 基本知识。
项目地址: [ice 组件](https://alibaba.github.io/ice/component/button)
## 学习计划
依照组件介绍循序渐进
## 安装教程
请按需添加 `ice` 组件依赖, 以下为react 环境基础安装:
1. cnpm install -g create-react-app
2. create-react-app my-app
3. cd my-app
2. yarn
3. yarn start
## ice 要点记录
1. Table
涉及dataSource, 以下三个参数的顺序不能错:
(value, index, record) => { }
- 含义:
- `value` 为 dataIndex 标识字段的值,
- `index` 为该条记录在array 中的索引,
- `record` 为整条记录。
```jsx
import { Table } from '@icedesign/base';
const dataSource = [
{id:1, time:'2016'},
{id:2, time: '2017'},
];
const renderTime = (value, index, record) => {
if (value === '2018') {
return '今年';
}
return value;
}
class TablePage extends Component {
render() {
return(
)
}
}
```
2. Table 之 onError 方法
官方给出的 onError 方法并没有奏效,推荐使用 errorImgSrc , 也更加符合直觉。
3. Img 如何实现一个切换的开关逻辑?
```jsx
function getImgs(url) {
if (url === 'https://img.alicdn.com/imgextra/i3/2779138589/TB2_gtLlrBmpuFjSZFuXXaG_XXa_!!2779138589.jpg') {
return 'https://img.alicdn.com/tps/TB1qfWuMVXXXXcEXpXXXXXXXXXX-434-254.png';
}
return 'https://img.alicdn.com/imgextra/i3/2779138589/TB2_gtLlrBmpuFjSZFuXXaG_XXa_!!2779138589.jpg';
}
export default class Image extends Component {
state = {
url1: 'https://img.alicdn.com/tps/TB1qfWuMVXXXXcEXpXXXXXXXXXX-434-254.png',
url2: 'https://img.alicdn.com/tps/TB1_AZdNFXXXXbLXVXXXXXXXXXX-500-1063.jpg',
}
changeImgs = () => {
this.setState({
url1: getImgs(this.state.url1),
url2: getImgs(this.state.url2),
})
}
render() {
return (
)
}
}
```
3. 表单操作
- Field 表单数据获取、校验工具
- rules 之 validator 详情见: [async-validator](https://github.com/yiminghe/async-validator#rules)
这里没有定义callback(), 其内部string 是 Error 信息。
" It expects to be passed an array of Error instances to indicate validation failure.";
- rules 之 trigger 设置出发条件, 数组形式, 填入事件名 "onBlue" 或 "onChange";
- 注意 isChecked 实现的方法, value 默认值为 true
```javascript
isChecked(rule, value, callback) {
if (!value) {
callback("没有勾选同意协议");
} else {
callback();
}
}
userName(rule, value, callback) {
if (value === "frank") {
setTimeout(() => callback("名称已经存在"), 200);
} else {
setTimeout(() => callback(), 200)
}
}
{this.field.getError("checkbox") ? (
{this.field.getError("checkbox").join(",")}
) : (
""
)}
```
## React 知识点回顾
1. 为何用 `bind(this)`
类 `onClose()` 这种函数写法的时候, 由于在`