setState

参数:nextState(object),[callback(function)]

设置nextState的某个键值。通常如果希望在某个事件或某个回调中来重新渲染组件,setState是一个最常用的触发方法,因为我们把UI内容跟state状态直接绑定在一起,一旦state发生改变并触动了绑定的逻辑,那么ui内容自然也会跟着变动:

 var Component1 = React.createClass({
getInitialState: function() {
return {
isClick: !
}
},
componentDidUpdate: function(){
console.log('componentDidUpdate')
},
clickCb: function() {
this.setState({
isClick : !
}, function(){
console.log(this.state.isClick)
})
},
render: function() {
return (<div onClick={this.clickCb}>
isClick:{this.state.isClick ? 'yes' : 'nope'}
</div>)
}
});
var div = document.getElementById('a');
ReactDOM.render(
<Component1 />, div
);

如上通过state.isClick来决定div内要显示的内容,而我们点击div时会改变state.isClick的状态,从而触发绑定条件更改了div中的内容。

运行结果如下:

注意:该方法的回调是在重新渲染之后执行的。

replaceState

参数:nextState(object),[callback(function)]

整体更换掉state,回调方法在重新渲染之后执行。

forceUpdate

参数:[callback(function)]

在任何调用的时候强制渲染组件,即使使用shouldComponentUpdata返回了false

注意:该方法的回调也是在重新渲染之后执行的。

getDOMNode

返回组件/ReactElment挂载到页面上所对应的DOM元素

 var Component1 = React.createClass({
getInitialState: function() {
return {
isClick: !
}
},
clickCb: function() {
this.setState({
isClick : !
}, function(){
console.log(this.state.isClick)
})
},
render: function() {
return (<div onClick={this.clickCb}>
isClick:{this.state.isClick ? 'yes' : 'nope'}
</div>)
}
});
var div = document.getElementById('a');
var c = ReactDOM.render(
<Component1 />, div
);
console.log(c.getDOMNode())

isMounted

返回一个布尔值,如果组件挂载到了dom中,isMounted()返回true

var UserGist = React.createClass({
getInitialState: function() {
return {
username: '',
lastGistUrl: ''
};
}, componentDidMount: function() {
$.get(this.props.source, function(result) {
var lastGist = result[];
if (this.isMounted()) {
this.setState({
username: lastGist.owner.login,
lastGistUrl: lastGist.html_url
});
}
}.bind(this));
}, render: function() {
return (
<div>
{this.state.username}'s last gist is
<a href={this.state.lastGistUrl}>here</a>.
</div>
);
}
}); ReactDOM.render(
<UserGist source="https://api.github.com/users/octocat/gists" />,
document.body
);

setProps

参数:nextProps(object),[callback(function)]

和setState类似,不过修改的是props。

replaceProps

参数:nextProps(object),[callback(function)]

和replaceState类似,不过修改的是props。

refs

这个方法不属于组件,但也是在组件中常用的一个小技巧

在前面中提到,可以使用ReactClass.getDOMNode()的方法来获取到组件渲染在页面上的DOM节点,但是如果希望获取到的,是组件中的某个DOM元素呢

 var Component1 = React.createClass({
clickCb: function(e) {
if(e.target === this.refs.li2.getDOMNode()){
alert('你点到第二个LI了')
}
},
render: function() {
return (<ul onClick={this.clickCb}>
<li></li>
<li ref="li2"></li>
<li></li>
</ul>)
}
});
var div = document.getElementById('a');
ReactDOM.render(
<Component1 />, div
);

组件中的第二个li绑定了一个ref属性,值为li2,这意味着可以在组件中以this.refs.li2的形式来获取到改ReactElement。然后绑定点击事件,在点击的时候判断被点击的li元素是否等于this.refs.lis.getDOMNode9()。

下面再看一个例子:

 var App = React.createClass({
getInitialState: function() {
return {userInput: ''};
},
handleChange: function(e) {
this.setState({userInput: e.target.value});
},
clearAndFocusInput: function() {
// Clear the input
this.setState({userInput: ''}, function() {
// 组件重绘后会立即执行这句代码:
this.refs.theInput.getDOMNode().focus(); // input成功聚焦(focus)
});
},
render: function() {
return (
<div>
<div onClick={this.clearAndFocusInput}>
Click to Focus and Reset
</div>
<input
ref="theInput" //我们可以在组件里以 this.refs.theInput 获取到它
value={this.state.userInput}
onChange={this.handleChange}
/>
</div>
);
}
});

React入门--------组件API的更多相关文章

  1. React入门--------组件的生命周期

    Mounting/组件挂载相关: componentWillMount componentDidMount Updating/组件更新相关: componentWillReceiveProps sho ...

  2. React入门--------顶层API

    React.createClass 参数:config(object) 创建一个ReactClass(组件类),参数是一个对象且必须带有render属性方法,该方法必须返回一个封闭的容器(容器内可以由 ...

  3. React入门---组件嵌套-5

    组件嵌套 我们现在需要组件嵌套,所以要创建其他组件,目前有一个头部组件,在./components/header.js; 接下来在components文件中创建:底部组件footer.js 和主体组件 ...

  4. React入门---组件-4

    组件:网页可以分为多个模块,比如头部,底部,分享等各种模块,这些模块在其他页面也可能会用到,我们把这些分开,每一个模块当作一个组件,进行复用. 接下来直接以头部 header作为一个组件来进行demo ...

  5. react入门-组件方法、数据和生命周期

    react组件也像vue一样,有data和methods,但是写法就很不同了: <!DOCTYPE html> <html lang="en"> <h ...

  6. react入门----组件的基础用法

    1.组件 <!-- React 允许将代码封装成组件(component),然后像插入普通 HTML 标签一样,在网页中插入这个组件.React.createClass 方法就用于生成一个组件类 ...

  7. 微信小程序入门与实战 常用组件API开发技巧项目实战*全

    第1章 什么是微信小程序? 第2章 小程序环境搭建与开发工具介绍 第3章 从一个简单的“欢迎“页面开始小程序之旅 第4章 第二个页面:新闻阅读列表 第5章 小程序的模板化与模块化 第6章 构建新闻详情 ...

  8. 【React】学习笔记(一)——React入门、面向组件编程、函数柯里化

    课程原视频:https://www.bilibili.com/video/BV1wy4y1D7JT?p=2&spm_id_from=pageDriver 目录 一.React 概述 1.1.R ...

  9. reactjs入门到实战(六)---- ReactJS组件API详解

    全局的api 1.React.createClass 创建一个组件类,并作出定义.组件实现了 render() 方法,该方法返回一个子级.该子级可能包含很深的子级结构.组件与标准原型类的不同之处在于, ...

随机推荐

  1. Windows Phone 8.1 Update1 支持中文“小娜”及开发者模拟器更新

    千呼万唤的 Windows Phone 8.1 Update1 在 developer Perview 发布了还没有升级的朋友随我先睹为快吧.升级了的朋友们来看看 WP8.1 update1 还有哪些 ...

  2. 对Joint Training of Cascaded CNN for Face Detection一文的几点疑惑

    最近读了Joint Training of Cascaded CNN for Face Detection这篇论文,论文中把之前人脸检测使用到的cascade cnn,从分开训练的模式,改为了联合训练 ...

  3. (转)使用Custom Draw实现ListCtrl的重绘

    使用Custom Draw实现ListCtrl的重绘   common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里 ...

  4. ios面试技术要点

    iOS面试 技术总结点(可参考):多线程 运行时 runloop app框架 几种动画编程 jsonmodel原理 sdwebimage原理 masonry怎么应用及原理 应用框架有哪些 说一下Fac ...

  5. 写给已有编程经验的 Python 初学者的总结

    当我开始学习Python的时候,有些事我希望我一早就知道.我花费了很多时间才学会这些东西.我想要把这些重点都编纂到一篇文章当中.这篇文章的目标读者,是刚刚开始学习Python语言的有经验的程序员,想要 ...

  6. Java框架篇---Mybatis 入门

    一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果.MyBatis ...

  7. maven中文乱码问题——编译错误

    新建了个web应用,用maven配置的. Java源代码采用了utf-8编码格式. 本地编译打包,报错误.   由于系统默认编码是GBK,因此需要采用utf-8来编译. 采用如下方式: 在pom中添加 ...

  8. ruby -- 进阶学习(十)自定义路由中:new, :collection和:member的区别

    学习链接:http://rubyer.me/blog/583/ RESTful风格的路由动词默认有7个(分别为:index, show, create, new, edit, update, dest ...

  9. EF封装类 增加版,增加从缓存中查找数据方法,供参考!

    EF封装类 增加版,增加从缓存中查找数据方法,供参考! 这个类是抽象类,我这里增加了需要子类验证的方法ValidateEntity,方便扩展,若想直接使用该类,可以将该类更改成静态类,里面所有的方法都 ...

  10. SQL中的循环

    DECLARE @SOInfoList TABLE ( SONumber INT, SODate datetime, Status char(1) ) INSERT INTO @SOInfoList ...