我的第一个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父子组件和组件类的继承弄混在一起了.这两个东西完全是不相关的. 父子组件可以看成两个组件标签的包含关系,在另外一个组件标签的内部就是子组件,父子组件通过这种关系通信. 组 ...
随机推荐
- 20145216史婧瑶《Java程序设计》第三次实验报告
实验三 敏捷开发与XP实践 实验内容 使用git上传代码,两个人进行小组合作,队友下载代码并修改再重新上传. 实验步骤 一. 使用git上传代码 1.找到需要push的文件所在文件夹,右键点击Git ...
- 20145328 《Java程序设计》实验四实验报告
20145328 <Java程序设计>实验四实验报告 实验名称 Andoid开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android ...
- 20145231熊梓宏《网络对抗》逆向及Bof基础
20145231网络对抗<逆向及Bof基础> 实验目的与要求 1.本次实践的对象是一个名为pwn1的linux可执行文件. 2.若该程序正常执行,则main函数会调用foo函数,foo函数 ...
- Android中C可执行程序编译问题
make:进入目录'/opt/FriendlyARM/tiny4412/android/android-4.1.2'make: *** 没有规则可以创建“out/target/product/gene ...
- .net 数据缓存(一)之介绍
现在的业务系统越来复杂,大型门户网站内容越来越多,数据库的数据量也越来愈大,所以有了“大数据”这一概念的出现.但是我们都知道当数据库的数据量和访问过于频繁都会影响系统整体性能体验,特别是并发量高的系统 ...
- minSdk(API 21) > deviceSdk(API 17)解决
运行一个开源的项目出现“minSdk(API 21) > deviceSdk(API 17)”的提示,因为我用的是手机是sdk(API17)的,而项目要求是最低版本是minSdk(API 21) ...
- Student : IComparable<Student> 以及逆变和协变
IComparable<Student>是Student的父类,所以IComparable<Student>可以接收Student.但是在使用CompareTo方法的时候,必须 ...
- mybatis动态插入数据(使用trim标签)
知识点: 当向一张表里插入数据,传入的参数不固定时,使用到mybatis的动态插入(trim标签) 参考博客:https://blog.csdn.net/h12kjgj/article/details ...
- linux(一)export的生命周期
本文从shell执行的角度分析export变量的生命周期 # 只对当前shell环境起作用,比如通过不同的远程ssh就是不同的shell环境 export k=v 当运行一个.sh文件或者是shell ...
- hdu5616 暴力枚举
2017-08-25 20:08:54 writer:pprp 题目简述: • HDU 5616• n个砝码,可以放在天平左右两侧或不放• m次询问,每次询问是否可以测出给定重量• 1 ≤ n ≤ 2 ...