react入门——慕课网笔记-程序员宅基地

一、 jsx

  1. 被称为语法糖:糖衣语法,计算机语言中添加的某种语法,对语言的功能没有影响,更方便程序员使用,增加程序的可读性,降低出错的可能性

    类似的还有(coffeescript,typescript),最终都被解析为js

  2. 解析jsx的是jsxtransformer.js      指定jsx语法用<text/jsx>

  3. 通过以下代码渲染dom

1 React.render(<hello name=”world”/>,
2 Document.getElementbyId(“container”));

 

var hello = React.createClass({
    render: function(){
        return <div>hello {
    this.props.name}</div>;
     }
});

React.render(<hello name="world"/>,
document.getElementById("container'));

 

  props是指属性组,this是实例

二、 css

  1. class

   不能在标签上直接写class,需要改为className  (由于此处非真正的dom,class是关键字,不能解析)

 

var Hello = React.createClass({
    render: function(){
        return <div className="redfont">hello {
    this.props.name}</div>;
    }
});

 

  2. 内联式

      不能字符串来表示,需要用样式对象来表示,样式对象是以驼峰标示写法,值为样式值

var Introduce = React.createClass({
    render: function(){
    return <div style={
    {fontSize:'44px'}}>{
    this.props.info}</div>;
    }
});

 

  {}中是执行表达式

  { {}}内联样式写法

  驼峰表达式:

render: function(){
    //定义样式内容,样式obj
    var styleObj = {
        color: 'red',
        fontSize:'32px'
    };
    //className代替class
    return <div className="redfont" style={styleObj}>hello {
    this.props.name}</div>;
}

 

三、React components生命周期

   

 

  1. Mounted是:React Components被render解析生成对应的DOM节点并被插入浏览器的DOM结构的一个过程。

  2. Update是:一个mounted的React Components被重新render的过程。
   对比当前state变化

   State

   每一个状态react都封装了对应的hook函数~钩子

   这种函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。

   对事件进行hook后系统会受到相应通知

  3.Unmounted是:一个mounted的React Components对应的DOM节点被从DOM结构中移除的这样一个过程。

     

    

    GetInitialstate

    最终返回一个object其中包含其state

getInitialState:function(){
    alert('init');
    return {
    opacity:1.0
    };
}

 

    This

    是伴随函数生成时的函数内部实例对象

    随着函数运行在不同的环境发生变化

    始终指的是调用函数的那个对象

    1.  当其出现在settimeout函数参数中时,由于函数参数就是一个纯粹的函数调用,不隶属于其他对象,隶属于全局对象,属于global
    2.  当其出现在setinistialstate这样的函数体内,是作为其所属实例对象的方法来调用,此时this指component实例对象
    3.  This出现在构造函数:
function test(){
    this.x = 1;
}
var o = new test();

 

    this 指新生成的对象

      4.   This出现在apply call bind等方法

        作用函数的调用对象,指第一个参数

四、 React-component-listener

  1. Dom更新

  传统:直接修改dom的innerhtml或classname

  事件绑定:Eventlistener

  React:

  给组件添加事件绑定(on驼峰式命名方式)

render: function (){
  return(
    <div>
      <button onClick={this.handleClick}>显示|隐藏</button>
      <span ref="tip"> 点击测试</span>
    </div>
  );
}

 

  添加点击事件:onClick={this.xxxxx}

  与dom绑定不一样,这里不是真实的dom节点,大小写敏感,通过对象属性定义在对象实例上

var Btnclick = React.createClass({
    handleClick: function(event){
     
    },

 

  Event对象是在js原生基础上封装的,因此同时具有原生event方法

 

  2. 获取组件

  1)使用‘ref’ property标记组件

  用ref属性给子组件添加名字,通过this.refs可以索引到子组件

render: function (){
    return(
        <div>
            <button onClick={
    this.handleClick}>显示|隐藏</button>
            <span ref="tip">    点击测试</span>
        </div>
    );
 }

 

  this.refs.tip

  索引到的是react component而不是真实的dom节点

 

  2)在dom里获得这个节点:

  使用react提供的方法:ReactDOM.findDOMNode(react component)

五、 补充

  ajax

   组件的数据来源,通常是通过 Ajax 请求从服务器获取,可以使用 componentDidMount 方法设置 Ajax 请求,等到请求成功,再用 this.setState 方法重新渲染 UI 

 1 var UserGist = React.createClass({
 2   getInitialState: function() {
 3     return {
 4       username: '',
 5       lastGistUrl: ''
 6     };
 7   },
 8 
 9   componentDidMount: function() {
10     $.get(this.props.source, function(result) {
11       var lastGist = result[0];
12       if (this.isMounted()) {
13         this.setState({
14           username: lastGist.owner.login,
15           lastGistUrl: lastGist.html_url
16         });
17       }
18     }.bind(this));
19   },
20 
21   render: function() {
22     return (
23       <div>
24         {
    this.state.username}'s last gist is
25         <a href={this.state.lastGistUrl}>here</a>.
26       </div>
27     );
28   }
29 });
30 
31 ReactDOM.render(
32   <UserGist source="https://api.github.com/users/octocat/gists" />,
33   document.body
34 );

 上面代码使用 jQuery 完成 Ajax 请求,这是为了便于说明。React 本身没有任何依赖,完全可以不用jQuery,而使用其他库。

 

六、 注意事项

  1. 注意react更新后的变化

  2. 返回虚拟dom时包装为一个div,保证返回一个结果

  3. 组件的首字母必须大写,不然不报错也不显示

  4. this.refs.[refName] 属性获取的是真实 DOM ,所以必须等到虚拟 DOM 插入文档以后,才能使用这个属性,否则会报错

  5. this.props 和 this.state 都用于描述组件的特性,可能会产生混淆。一个简单的区分方法是,this.props 表示那些一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变化的特性。

  6. 用户在表单填入的内容,属于用户跟组件的互动,所以不能用 this.props 读取,而要定义一个 onChange 事件的回调函数,通过 event.target.value 读取用户输入的值。textarea 元素、select元素、radio元素都属于这种情况

  7. 使用map遍历时注意:

  

  8. grunt build可以用npm run list 代替

 

 

 

 

 

 

 

以上为慕课网《react入门》总结,所有试验代码地址已上传至git:https://github.com/chaoranwill/chaoran-home/tree/master/react/react-mytest  欢迎fork/clone

视频教程来源:MOOC      其他教程推荐:阮一峰

转载于:https://www.cnblogs.com/chaoran/p/6284230.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/akufr2065/article/details/101957280

智能推荐

前端开发之vue-grid-layout的使用和实例-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏34次。vue-grid-layout的使用、实例、遇到的问题和解决方案_vue-grid-layout

Power Apps-上传附件控件_powerapps点击按钮上传附件-程序员宅基地

文章浏览阅读218次。然后连接一个数据源,就会在下面自动产生一个添加附件的组件。把这个控件复制粘贴到页面里,就可以单独使用来上传了。插入一个“编辑”窗体。_powerapps点击按钮上传附件

C++ 面向对象(Object-Oriented)的特征 & 构造函数& 析构函数_"object(cnofd[\"ofdrender\"])十条"-程序员宅基地

文章浏览阅读264次。(1) Abstraction (抽象)(2) Polymorphism (多态)(3) Inheritance (继承)(4) Encapsulation (封装)_"object(cnofd[\"ofdrender\"])十条"

修改node_modules源码,并保存,使用patch-package打补丁,git提交代码后,所有人可以用到修改后的_修改 node_modules-程序员宅基地

文章浏览阅读133次。删除node_modules,重新npm install看是否成功。在 package.json 文件中的 scripts 中加入。修改你的第三方库的bug等。然后目录会多出一个目录文件。_修改 node_modules

【】kali--password:su的 Authentication failure问题,&sudo passwd root输入密码时Sorry, try again._password: su: authentication failure-程序员宅基地

文章浏览阅读883次。【代码】【】kali--password:su的 Authentication failure问题,&sudo passwd root输入密码时Sorry, try again._password: su: authentication failure

整理5个优秀的微信小程序开源项目_微信小程序开源模板-程序员宅基地

文章浏览阅读1w次,点赞13次,收藏97次。整理5个优秀的微信小程序开源项目。收集了微信小程序开发过程中会使用到的资料、问题以及第三方组件库。_微信小程序开源模板

随便推点

Centos7最简搭建NFS服务器_centos7 搭建nfs server-程序员宅基地

文章浏览阅读128次。Centos7最简搭建NFS服务器_centos7 搭建nfs server

Springboot整合Mybatis-Plus使用总结(mybatis 坑补充)_mybaitis-plus ruledataobjectattributemapper' and '-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏3次。前言mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中通过SQL语句操作数据库,很是灵活。但正其操作都要通过SQL语句进行,就必须写大量的xml文件,很是麻烦。mybatis-plus就很好的解决了这个问题。..._mybaitis-plus ruledataobjectattributemapper' and 'com.picc.rule.management.d

EECE 1080C / Programming for ECESummer 2022 Laboratory 4: Global Functions Practice_eece1080c-程序员宅基地

文章浏览阅读325次。EECE 1080C / Programming for ECESummer 2022Laboratory 4: Global Functions PracticePlagiarism will not be tolerated:Topics covered:function creation and call statements (emphasis on global functions)Objective:To practice program development b_eece1080c

洛谷p4777 【模板】扩展中国剩余定理-程序员宅基地

文章浏览阅读53次。被同机房早就1年前就学过的东西我现在才学,wtcl。设要求的数为\(x\)。设当前处理到第\(k\)个同余式,设\(M = LCM ^ {k - 1} _ {i - 1}\) ,前\(k - 1\)个的通解就是\(x + i * M\)。那么其实第\(k\)个来说,其实就是求一个\(y\)使得\(x + y * M ≡ a_k(mod b_k)\)转化一下就是\(y * M ...

android 退出应用没有走ondestory方法,[Android基础论]为何Activity退出之后,系统没有调用onDestroy方法?...-程序员宅基地

文章浏览阅读1.3k次。首先,问题是如何出现的?晚上复查代码,发现一个activity没有调用自己的ondestroy方法我表示非常的费解,于是我检查了下代码。发现再finish代码之后接了如下代码finish();System.exit(0);//这就是罪魁祸首为什么这样写会出现问题System.exit(0);////看一下函数的原型public static void exit (int code)//Added ..._android 手动杀死app,activity不执行ondestroy

SylixOS快问快答_select函数 导致堆栈溢出 sylixos-程序员宅基地

文章浏览阅读894次。Q: SylixOS 版权是什么形式, 是否分为<开发版税>和<运行时版税>.A: SylixOS 是开源并免费的操作系统, 支持 BSD/GPL 协议(GPL 版本暂未确定). 没有任何的运行时版税. 您可以用她来做任何 您喜欢做的项目. 也可以修改 SylixOS 的源代码, 不需要支付任何费用. 当然笔者希望您可以将使用 SylixOS 开发的项目 (不需要开源)或对 SylixOS 源码的修改及时告知笔者.需要指出: SylixOS 本身仅是笔者用来提升自己水平而开发的_select函数 导致堆栈溢出 sylixos

推荐文章

热门文章

相关标签