React入门--------组件API

setState

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

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

 var Component1 = React.createClass({
        getInitialState: function() {
            return {
                isClick: !1
            }
        },
        componentDidUpdate: function(){
            console.log(‘componentDidUpdate‘)
        },
        clickCb: function() {
            this.setState({
                isClick : !0
            }, 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: !1
            }
        },
        clickCb: function() {
            this.setState({
                isClick : !0
            }, 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[0];
      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>1</li>
                <li ref="li2">2</li>
                <li>3</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>
      );
    }
  });
时间: 2024-08-29 04:20:20

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

React入门--------组件的声明周期

Mounting/组件挂载相关: componentWillMount componentDidMount Updating/组件更新相关: componentWillReceiveProps shouldComponentUpdate componentWillUpdate componentDidUpdate Unmounting/组件移除相关: componentWillUnmount 一.Mounting/组件挂载相关 componentWillMount 在组件挂载之前执行,但仅执行一

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

组件嵌套 我们现在需要组件嵌套,所以要创建其他组件,目前有一个头部组件,在./components/header.js; 接下来在components文件中创建:底部组件footer.js 和主体组件BodyIndex.js 项目框架应该为: 底部组件footer.js 和主体组件BodyIndex.js代码编译: 1. header.js (之前有编译过) import React from 'react'; import ReactDOM from 'react-dom'; //创建一个类

React入门--------顶层API

React.createClass 参数:config(object) 创建一个ReactClass(组件类),参数是一个对象且必须带有render属性方法,该方法必须返回一个封闭的容器(容器内可以由其他不限结构的容器)或null/false(表示啥都不渲染): var Component = React.createClass({ render: function() { return this.props.a==1 ? <div><h1>标题</h1><p&g

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

1.组件 1 <!-- React 允许将代码封装成组件(component),然后像插入普通 HTML 标签一样,在网页中插入这个组件.React.createClass 方法就用于生成一个组件类 --> 2 var HelloMessage = React.createClass({ 3 render: function() { 4 return <h1>Hello {this.props.name}</h1> 5 } 6 }) 7 <!-- 变量 Hello

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

react组件也像vue一样,有data和methods,但是写法就很不同了: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta ht

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

全局的api 1.React.createClass 创建一个组件类,并作出定义.组件实现了 render() 方法,该方法返回一个子级.该子级可能包含很深的子级结构.组件与标准原型类的不同之处在于,你不需要使用 new 来实例化. 组件是一种很方便的封装,可以(通过 new )为你创建后台实例. 2.React.createElement ReactElement createElement( string/ReactClass type, [object props], [children

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

新年伊始,学习要趁早,点滴记录,学习就是进步! 随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了.对于学习有困难不知道如何提升自己可以加扣:1225462853  获取资料. 下载地址:https://pan.baidu.com/s/1hsU5EIS 微信小程序入门与实战 常用组件API开发技巧项目实战 小程序官方正式公告,开放了更多的入口,个人开发者可以申请

React 入门实例教程

React 入门实例教程 作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的

(转)React 入门实例教程

作者: 阮一峰 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非