赵走x博客
网站访问量:151902
首页
书籍
软件
工具
古诗词
搜索
登录
49、Flux:理念、回顾Whinepad
48、lint、Flow、测试与复验:测试
47、lint、Flow、测试与复验:Flow
46、lint、Flow、测试与复验:ESLint
45、lint、Flow、测试与复验:package.json
44、构建实例应用:<Whinepad>
43、构建实例应用:应用配置
43、构建实例应用:<Excel>:改进的新版本
42、构建实例应用:组件:对话框
41、构建实例应用:组件:Actions
39、构建实例应用:表单:Form
38、构建实例应用:表单:<FormInput>“工厂组件”
37、构建实例应用:表单:Rating组件
36、构建实例应用:表单:Suggest
35、构建实例应用:Button组件
34、构建实例应用:组件
33、构建实例应用:Whinepad v.0.0.1
32、发布
31、开始构建
30、安装必备工具
29、为应用开发做准备:一个模板应用
28、JSX 和表单
27、JSX 和HTML 的区别
26、在JSX 中返回多个节点
25、展开属性
24、HTML 实体
23、JSX入门
22、Excel:一个出色的表格组件:下载表格数据
21、Excel:一个出色的表格组件:即时回放
20、Excel:一个出色的表格组件:搜索
19、Excel:一个出色的表格组件:编辑数据
18、Excel:一个出色的表格组件:排序
17、Excel:一个出色的表格组件
16、 PureRenderMixin
15、 性能优化:避免组件更新
14、 生命周期示例:使用子组件
13、组件生命周期示例:使用mixin
12、组件:生命周期方法
11、中途改变属性
10、从外部访问组件
9、在初始化state 时使用props:一种反模式
8、 props 与state
7、关于DOM 事件的说明
6、组件:带状态的文本框组件
5、组件的state
4、组件的propTypes
3、组件的属性
2、组件的基础
1、Hello World
50、Flux:Store
38、构建实例应用:表单:<FormInput>“工厂组件”
资源编号:76091
书籍
React快速上手开发
热度:79
接下来编写一个通用的`<FormInput> `组件,它负责根据传入的属性渲染对应的组件。通过该组件产生的输入组件具有一致的行为(都提供了用于取值的getValue() 方法)。
接下来编写一个通用的`
`组件,它负责根据传入的属性渲染对应的组件。通过该组件产生的输入组件具有一致的行为(都提供了用于取值的getValue() 方法)。 在发现工具中编写测试(如图6-6 所示): ```
Form inputs
Vanilla input
Prefilled
Year
Rating
Suggest
Vanilla textarea
```  图6-6:表单输入 `
` 组件的实现(js/source/components/FormInput.js)和以往类似,使用了import、export 以及用于验证属性的propTypes: ``` import Rating from './Rating'; import React, {Component, PropTypes} from 'react'; import Suggest from './Suggest'; class FormInput extends Component { getValue() {} render() {} } FormInput.propTypes = { type: PropTypes.oneOf(['year', 'suggest', 'rating', 'text', 'input']), id: PropTypes.string, options: PropTypes.array, // 用于
选项列表的自动补全功能 defaultValue: PropTypes.any, }; export default FormInput ``` render() 方法包含一个大的switch 语句块,负责把输入元素创建的工作分配给某一个具体的组件。如果没有匹配到自定义组件,则默认渲染内建的DOM 元素`
` 与`
`: ``` render(){ const common={ //通用属性 id:this.props.id, ref:'input', defaultValue:this.props.defaultValue }; switch (this.props.type) { case 'year': return (
); case 'suggest': return
; case 'rating': return (
); case 'text': return
; default: return
} } ``` 注意到ref 属性的使用了吗?事实上,在获取输入框的取值时,ref 属性是比较方便实用的: ``` getValue(){ return 'value' in this.refs.input ?this.refs.input.value :this.refs.input.getValue(); } ``` 在这里,this.refs.input 是底层DOM 元素的一个引用。对于原生DOM 元素,比如`
` 和`
`, 通过this.refs.input.value 获取value 属性值( 就像原生的DOM 操作方法document.getElementById('some-input').value 那样)。对于自定义组件, 比如`
` 和`
`,则调用它们本身的getValue() 方法。