我的第一个React自定义组件
今天随便翻了一下antd的组件库,看到下面这样的组件,当时我就震惊了:

这尼玛,这是出于什么样的考虑,一个列表还要用户编写子项的渲染方式。
所以,我就自己写了一个
List.js:

List.less:

index.js:

效果:

当然,可以根据需要添加更多的事件以及对其他数据格式的支持。
自个儿写了个Input输入框组件:
X_UI.js:
import React, { Component } from 'react';
import './X_UI.less';
/*输入框*/
export class Input extends Component {
constructor(props) {
super(props);
this.state = {
value:props.value,
}
}
/*双向数据绑定更新父组件*/
onchange = (e)=>{
var value = e.target.value;
this.setState({
value:value
});
if(this.props.onChange){
this.props.onChange(value);
}
}
/*双向数据绑定更新子组件*/
componentWillReceiveProps = (nextProps) => {
this.setState({
value:nextProps.value,
})
}
render() {
console.log(this.props.size);
var style;
switch (this.props.size){
case 'large':
style={
height:'36px',
inlineHeight:'36px',
fontSize:'18px'
}
break;
case 'small':
style={
height:'24px',
inlineHeight:'24px',
fontSize:'12px'
}
break;
default:
style={
height:'30px',
inlineHeight:'30px',
fontSize:'15px'
}
break;
}
//与props.style属性合并
style = Object.assign(this.props.style||{},style)
var placeholder = this.props.placeholder||'请输入...';
return (
<div className="x_input">
<input placeholder={placeholder} style={style} onChange={this.onchange} value={this.state.value}></input>
</div>
);
}
}
X_UI.less:
@gray:rgb(,,);
@blue:rgb(,,); input::-webkit-input-placeholder{
color:@gray !important;
}
input::-moz-placeholder{
color:@gray !important;
}
input:-ms-input-placeholder {
color:@gray !important;
} .x_input{
>input{
border:1px solid @gray;
padding:2px 6px;
border-radius:4px;
}
>input:hover{
border:1px solid @blue;
}
>input:focus{
border:1px solid transparent;
box-shadow: 3px 1px @blue;
outline:none
}
}
App.js:
import React, { Component } from 'react';
import {Input} from '../../components/X_UI'
import './App.less';
export class App extends Component {
constructor(props) {
super(props);
this.state = {
value:'hello'
};
}
change=(value)=>{
this.setState({
value:value
})
}
render() {
return (
<div className="app">
<Input size="small" value={this.state.value} onChange={this.change} />
{this.state.value}
<button onClick={this.change.bind(this,'world')}>Click</button>
</div>
);
}
}
效果:



我的第一个React自定义组件的更多相关文章
- Griddle, griddle-react 一个REACT 表格组件
Griddle, griddle-react 一个REACT 表格组件: http://griddlegriddle.github.io/Griddle/index.html
- react自定义组件属性类型检测
react当中的props-type用来检测传入组件当中的数据是否符合组件的要求,但是之前的只是能做些简单常规的判断,如果需要做复杂的判断,就需要使用到自定义函数来做类型检测了. 下面是官网的例子 c ...
- 移动web端的react.js组件化方案
背景: 随着互联网世界的兴起,web前端开发的方式越来越多,出现了很多种场景开发的前端架构体系,也对前端的要求日益增高,早已经不是靠一个JQuery.js来做前端页面的时代了,而今移动端变化最大,近 ...
- 动手实现react Modal组件
Modal组件 长话不多说,接下来让我们来动手实现一个react Modal组件. 我们先来看一下实际效果 Modal的布局 首先,让我们先思考下一个Modal组件的布局是怎么样的. 我们先拿一个基本 ...
- React Native组件的结构和生命周期
React Native组件的结构和生命周期 一.组件的结构 1.导入引用 可以理解为C++编程中的头文件. 导入引用包括导入react native定义的组件.API,以及自定义的组件. 1.1 导 ...
- 使用react context实现一个支持组件组合和嵌套的React Tab组件
纵观react的tab组件中,即使是github上star数多的tab组件,实现原理都非常冗余. 例如Github上star数超四百星的react-tab,其在render的时候都会动态计算哪个tab ...
- 分享一个react 图片上传组件 支持OSS 七牛云
react-uplod-img 是一个基于 React antd组件的图片上传组件 支持oss qiniu等服务端自定义获取签名,批量上传, 预览, 删除, 排序等功能 需要 react 版本大于 v ...
- React自己写的一个地图小组件
由于今天比较闲,就玩了玩react,然后就封装了一个地图的组件,当然功能比较简单,因为就是随手写的小东西,但是由于引用了百度API和bee-mobile,所以用起来可能要薛微麻烦一点点,但是我保证,只 ...
- React父子组件的一个混淆点
反正我自己是混淆了,React父子组件和组件类的继承弄混在一起了.这两个东西完全是不相关的. 父子组件可以看成两个组件标签的包含关系,在另外一个组件标签的内部就是子组件,父子组件通过这种关系通信. 组 ...
随机推荐
- RocEDU.阅读.写作《乌合之众》(一)
序言 作者在序言里主要论述了时代演变的内在原因,表明对群体进行研究的重要性,阐述了研究群体行为特征时的研究方法,并概述了群体的发展过程. 造成文明变革的唯一重要变化,是影响到思想.观念和信仰的变化.目 ...
- Linux简单编程学习心得
在Linux环境下简单编程学习心得 linux编程过程 在上周的<信息安全设计基础>的课程学习中学习到了在虚拟的linux环境下简单的编程.学习过程中接触到了vim.gcc和gcd在实验楼 ...
- 输入n,求1~n累加
最开始可能会使用for循环来计算,现在直接使用等差数据计算和公式:s=(a0+n)*n/2 long sum(int n) { long ret=0: ret = (1+n)* n /2: retur ...
- MysQL使用一查询
简介 查询的基本语法 select * from 表名; from关键字后面写表名,表示数据来源于是这张表 select后面写表中的列名,如果是*表示在结果中显示表中所有列 在select后面的列名部 ...
- [BZOJ4137]火星商店问题
Description 火星上的一条商业街里按照商店的编号1,2 ,…,n ,依次排列着n个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数val来标价.每个商店每天都有可能进一些新商品, ...
- selenium webdriver模拟鼠标键盘
在测试使用Selenium webdriver测试WEB系统的时候,用到了模拟鼠标.键盘的一些输入操作. 1.鼠标的左键点击.双击.拖拽.右键点击等: 2.键盘的回车.回退.空格.ctrl.alt.s ...
- Python学习札记(十八) 高级特性4 生成器
参考:生成器 Note 1.通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的,且容易造成空间浪费.所以,如果列表元素可以按照某种算法推算出来,那我们可以在循环的过程中 ...
- Nginx与PHP(FastCGI)的安装、配置
摘自:http://www.linuxde.net/2012/03/9130.html 一.什么是 FastCGI FastCGI是一个可伸缩地.高速地在HTTP server和动态脚本语言间通信的接 ...
- 【三小时学会Kubernetes!(四) 】Deployment实践
Deployment 部署 Kubernetes 部署可以帮助每一个应用程序的生命都保持相同的一点:那就是变化.此外,只有挂掉的应用程序才会一尘不变,否则,新的需求会源源不断地涌现,更多代码会被开发出 ...
- 构建hadoop集群时遇到的问题
在构建hadoop集群时,出现过主节点中的namenode或datanode启动不成功的问题.在日志文件中往往会显示namenode和datanode中clusterID不相同的问题,这个问题往往都是 ...