react 细节整理

前言:

  在使用react时针对于其的大面的语法,规范等是有了解的,可能会忽略了些细节的东西导致在调试的时候会很麻烦,今天我将针对其中的细节点进行下整理,希望能够让大家更加深入,全面地地去了解react。

细节

  1. 组件类的render中只能包含一个顶级标签

  // 错误写法
  var ErrorComponent = React.createClass({
      render: function() {
          return  <span>test1</span>
                  <span>test2</span>;
      }
  })
  // 正确写法
  var SuccessComponent = React.createClass({
      render: function() {
          return
              <div>
                  <span>test1</span>
                  <span>test2</span>
              </div>;
      }
  })

  2. 两个特殊属性: 由于class和for是js的关键字,故此class->className  for->htmlFor

  3. this.props可以一一获取其对应的组件的属性值,但是有一特殊值-this.props.children(表示组件的子节点),不同情况返回不同类型的值

     3.1 undefined: 无子节点

     3.2 object:只有一个子节点

     3.3 array: 两个及以上子节点

    有人说了使用这个属性太麻烦了,还需要判断类型。。答案是否定的。。react提供了React.Children的工具方法来处理this.props.children的属性值

var SuccessComponent = React.createClass({
    render: function() {
        return (
            <ul>
                {
                    React.Children.map(this.props.children, function (dom) {
                        return <li>{dom}</li>;
                    })
                }
            </ul>
        );
    }
});

ReactDOM.render(
    <SuccessComponent>
        <span>test1</span>
        <span>test2</span>
        <span>test3</span>
    </SuccessComponent>,
    document.body
);

  4.ref

    前言: 组件并不是真实的DOM,而是存在于内存中的数据结构-虚拟DOM,  只有当插入到文档中才会形成真实的DOM,所有DOM的改动都会先更新虚拟DOM之后再根据具体的变化更新到对应的真实DOM上

    作用: ref用于引用真实DOM,因此必须保证操作this.refs.[refName]的时候必须保证虚拟DOM插入到文档中才可使用

var FormComponent = React.createClass({
    focusUserName: function () {
        this.$refs.userName.focus();
    },
    render: function() {
        return (
            <div>
                <input type="text" name="userName" ref="userName" />
                <button onClick={this.focusUserName}></button>
            </div>
        );
    }
});

谢谢客官的品尝,如有不严谨和错误地方请希望指正,祝大家工作和生活顺利 !

    

  

  

原文地址:https://www.cnblogs.com/yincece0316/p/12594752.html

时间: 2024-10-12 13:39:43

react 细节整理的相关文章

PHP7版本改动细节整理翻译完毕

自从鸟哥发布PHP7相关的版本以来,就一直关注PHP7的进展.PHP7是非常值得期待的一个版本,性能获得了极大的提升,语法也更加合理规范.最近就花了一些时间,整理翻译了PHP7版本的改动记录文件.主要包括了以下部分: 2 非兼容性改动 2.1 语言修改 2.1.1 变量处理机制修改 2.1.2 list()修改 2.1.3 foreach 修改 2.1.4 参数处理机制修改 2.1.5 整型处理机制修改 2.1.6 字符串处理机制修改 2.1.7 错误处理机制修改 2.1.8 其他语言层面的修改

测试细节整理

回想起测试工作的点点滴滴,对于在做的项目管理app ,将容易忽视的bug或细节记录出来,不断去提高自己 1.列表数据量比较大时,进入数据详情界面,返回的列表界面需要停留在用户之前停留的地方,否则体验会很差,一般开发会设置为手动刷新 (eg:项目列表中存在很多个项目,假如用户进入列表的第二页,点击其中一个项目,进入项目详情界面,返回项目列表时,页面停留在第二页) 2. 搜索记录列表上下滑动进行刷新,数据会错误显示为空 3.对于删除数据的历史数据处理 (eg:对成员a分配任务,任务列表显示成员a的任

webpack react 错误整理

1.ERROR in ./src/entry.js Module build failed: SyntaxError 解决方法: 安装babel-preset-react,  npm install --save-dev babel-preset-react 修改webpack配置文件,添加preset选项 2.ERROR in bundle.js from UglifyJs Unexpected token: punc ()) [bundle.js:25884,14] 在添加并使用react-

Shell操作之细节整理(未完结)

在学习Linux过程中,曾经遇到过一些小问题,虽然可能微不足道,但是在追求细节的时候往往会比较纠结(强迫症犯了),空出一个博客文章空间,记录一些细节上的内容,都是很小很简单的东西,不喜勿喷. 01.bc计算时浮点问题 记的用bc计算数字的时候,如果结果出现小数点,则小数点后内容默认不显示,当时没太在意. [[email protected] wangdong]# echo "1500/1024" | bc 1 [[email protected] wangdong]#  [[email

【Android界面实现】ActionBar使用的若干细节整理

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 关于ActionBar的使用,很多大神早就已经写了非常好的文章进行了介绍,所以ActionBar的基本使用本文再赘述,今天我们主要讨论一下ActionBar在使用中的一些细节问题. 1.使用ActionBar的手机版本限制是什么? 系统原生的ActionBar是在Android3.0(API 11)才引入的,主要用来提供一个统一风格的导航栏,来代替Activity的标题栏.对于手机来说,版本只存在2.x时

指针细节整理2

/*指针的细节汇总 2017年12月15日14:59:34 */ #include <stdio.h> int main(void) { int a[10]={1,2,3,4,5,6}; int b[20]={1,2,3,4,5,6,7,8}; int *p = a;//指针变量指向a的地址. int * q1 = &b[5];//指针变量指向b[5]的地址. int * q2 = &b[3];// printf("--------\n"); printf(

Java细节整理——数组与内存控制

重点:使用Java数组之前,必须对数组对象进行初始化. 当数组的所有元素都被分配了合适的内存空间,并指定了初始值时,数组的初始化完成.程序以后将不能重新改变数组对象在内存中的位置和大小. 知识点整理: 1.数组的初始化有以下两种方式: 1)静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组的长度. 2)动态初始化:初始化时程序员只指定数组的长度,由系统为数组元素分配初始值. 不管使用哪种方式初始化Java数组,一旦初始化完成,该数组的长度就不可改变. 代码示例: publi

React初识整理(一)

一.React的特点 1.自动化的UI状态管理:自动完成数据变化与界面效果的更新. 2.虚拟DOM:创建1个虚拟的dom节点树,放在内存里(内存修改数据效率高),数据变化时先修改内存里的虚拟DOM,然后与页面的DOM进行对比,React可以做优化,优化后可只修改变化的部分,缩小节点更改的范围,从而提高效率.(正常情况下改变节点后要重新渲染页面,效率慢). 3.组件化开发:管理页面的各功能,将1个功能视为1个组件.每个组件都可以有各自的结构.样式.行为,然后把所有的组件拼合起来的开发方式.单页应用

CSS面试细节整理(一)

最近面试时候发现自己最熟悉的css确实开发中好多细节没注意到,为了防止在栽跟头,打算从头到底捋一遍咯 语法部分: 1.css几种选择器的写法 (1)h1 em {color:red;} (后代选择器) (2)h1 > strong {color:red;} (子元素选择器) (3)table.company td > p(结合后代选择器和子选择器) (4)h1 + p {margin-top:50px;} (相邻兄弟选择器) 例子:li + li {font-weight:bold;} 会把列