React响应用户输入学习笔记——慕课网

React响应用户输入学习笔记——慕课网

React响应用户输入慕课网视频:传送门

第1章 数据逻辑与UI的结合

1.1 数据逻辑与UI的结合(1)

  1. 建立一个简单的React的例子,效果为一个圆的图片;目的是:将底层的数据逻辑处理过程与前端的UI结合在一起;如何将原有的JavaScript数据结构和React结构结合起来;

1.2 数据逻辑与UI的结合(2)

  1. 了解JSX的对象的数据格式,我们还可以将JSX对象当做变量来使用,例:var theCircle= <Circle bgColor="#f00"/>;
    在React.render()的DOM节点中加入{theCircle},因而我们可以把数据逻辑设计的很复杂,然后由react框架来解析数据;
    在浏览器中显示由Warning,需要给每一个组件加入一个key属性,见下面程序;
      var dist= document.getElementById('example');
      class Circle extends React.Component{
        render(){
          var circlStyle={
            padding:10,margin:20,display:"inline-block",
            backgroundColor:this.props.bgColor,borderRadius:"50%",
            width:100, height:100
          };
          return(
            <div style={circlStyle}></div>
          );
        }
      }
      //var theCircle= <Circle bgColor="#f00"/>;
      function showCircle(){
        var colors=["red", "blue", "yellow", "gray","black","pink","#887552","#E94F37"];
        var circleItem= [];
        for(let i= 0; i< colors.length; i++){
          var randNum= Math.floor(Math.random()* colors.length);
          circleItem.push(<Circle bgColor= {colors[randNum]} key={i+ colors[randNum]}/>);
        }
        return circleItem;
      }
      ReactDOM.render(
        <div>
          {showCircle()}
        </div>,
        dist
      );

第2章 事件处理机制

2.1 React的事件处理机制(1)

  1. 要实现一个用户交互的简单实例,点击按钮实现数字增加的例子,来解释React的事件处理机制,如何对事件进行监听,还有如何进行事件处理;

2.2 React的事件处理机制(2)

  1. React如何处理用户的操作事件;
  • 一定注意: this的指向问题,若是调用自定义的函数,必须在构造函数constructor中加一条 ,例: this.increase= this.increase.bind(this); 要不然会出现找不到该属性的错误;
  1. 在按钮点击事件触发的increase函数中传入的 e 这个参数包含许多知识,通过e可以得知许多与改时间相关的信息,例如鼠标的按键是左键还是右键的信息,或者是键盘当前哪个按钮被按下;实际上 e 指向的是React 所封装的 SyntheticEvent对象,该对象面向的是各种不同的事件所引发的DOM的事件对象;
  • SyntheticEvent对象有许多属性,例如bubbles、target、type等等属性,该对象还会封装不同属性,如MouseEvent对象
  • 例子:对 shiftKey 的属性测试;见代码【注意setState方法中只能改变state的状态的值】
      var dist= document.getElementById('example');
      //子组件显示数字
      class Counter extends React.Component{
        render(){
          var textStyle={
            fontSize:72,color:"#333",fontWeight:"bold"
          };
          return (
            <div style={textStyle}>
              {this.props.display}
            </div>
          );
        }
      }
      //父组件框
      class CounterParent extends React.Component{
        constructor(props){
          super(props);
          this.state= {
            count: 0
          };
          //一定要注意this的执行问题,必须加这句话
          this.increase= this.increase.bind(this);
        }
        //增加count值,注意这个传入的变量 e 里面有许多知识;
        increase(e){
          var curCount= this.state.count;
          if(e.shiftKey == true){
            curCount= curCount + 100
          }else{
            curCount= curCount + 1             
          }            
          this.setState({
            count:curCount
          });
        }
        render(){
          var backgroundStyle= {
            padding:50,backgroundColor:"#ffc53A",width:250,height:100, borderRadius:10,textAlign:"center"
          };
          var buttonStyle= {
            fontSize:"1em",width:30,height:30,color:"#333",
            fontWeight:"bold", lineWeight:"3px"
          };
          return(
            <div style= {backgroundStyle}>
              <Counter display= {this.state.count}/>
              <button style= {buttonStyle} onClick= {this.increase}>+</button>
            </div>
          );
        }
      }
      ReactDOM.render(
        <CounterParent/>,
        dist
      );

第3章 DOM 模型的操作

3.1 React 对 DOM 模型的操作 (1)

  1. 目的是研究React 框架如何处理最原始的DOM节点元素,通过一个实例来看,在不违背React框架的原则下,通过直接操作DOM元素或使用原生的DOMAPI实现功能,实例效果为输入一个颜色rgb值,在DIV中显示颜色;

注意的是在提交后的输入框的内容以及按钮的焦点状态的问题,讨论如何快速解决问题;

3.2 React 对 DOM 模型的操作 (2)

  1. 实现组件UI框架的构建,以及一些样式的设置;

3.3 React 对 DOM 模型的操作 (3)

  1. 实现点击按钮,将输入的颜色值展示位颜色的逻辑实现

当我们点击按钮时,将input输入框中输入的颜色值设置为当前的state状态中bgcolor的值,render函数重新调用,然后显示颜色的div框中通过调用新状态值进行设置颜色;

小技巧:添加了一个新的标签form,包含提交按钮,设置form的onSubmit函数,调用响应用户点击按钮后的事件函数onSubmit= {this.setNewColor}

3.4 React 对 DOM 模型的操作 (4)

  1. 解决用户体验差的问题:实现文本内容的自动清空与按钮的焦点自动装换;

React用的是JSX的语法,JSX实际上是HTML代码格式的延伸;那么如何通过有效的办法去获得原生控件具体的JavaScript对象本身;

React框架让HTML与JSX控件对象添加了一个桥梁,就是 ref 的属性机制,让我们在JSX里面直接引用到控件本身的JavaScript对象,见代码

多阅读 ref 的相关资料,了解更多用法

      var dist= document.getElementById('example');
      class Colorizer extends React.Component{
        //constructor构造器设置初始化的state状态值
        constructor(props){
          super(props);
          this.state={
            color:'',
            bgColor:''
          };
          //一定要绑定组件的函数的this指向
          this.colorValue= this.colorValue.bind(this);
          this.setNewColor= this.setNewColor.bind(this);          
        }
        //获取文本框中输入的内容,注意 e 包含的内容(重要)
        colorValue(e){
          this.setState({
            color:e.target.value
          });
        }
        //用来响应用户点击按钮后的事件,注意 e 包含的内容(重要)
        setNewColor(e){
          this.setState({
            bgColor:this.state.color
          });
          //清除文本框的内容和加入文本框输入焦点
          this._input.value= "";
          this._input.focus();
          console.log(this._input);
          e.preventDefault();
        }
        render(){
          var squareStyle= {backgroundColor:this.state.bgColor};
          var self= this;
          return(
            <div className= "colorArea">
              <div style= {squareStyle} className= "colorSquare"></div>
              <form onSubmit= {this.setNewColor}>
                <input ref= {
                  function(el){
                    self._input= el;
                  }
                } 
                onChange={this.colorValue} placeholder= "Please enter a color:"/>
                <button type="submit">Show</button>
              </form>
            </div>
          );
        }
      }
      ReactDOM.render(
        <Colorizer/>,
        dist
      );
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • ReactJs小书笔记(一) ReactJs小书官方文档:传送门 1 react简介 React.js 不是一个框...
    Haleng阅读 686评论 0 0
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,477评论 1 11
  • React组件学习笔记——慕课网 React组件慕课网视频:传送门 第1章 初识React 1.1 React基本...
    Haleng阅读 555评论 0 0
  • ReactJs小书笔记(二) ReactJs小书官方文档:传送门 17 前端应用状态管理——状态提升 概念:当平级...
    Haleng阅读 281评论 0 0
  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,813评论 1 18