组件嵌套后,父组件怎么向子组件发送数据呢?

答案是: this.props

    <script type="text/babel">
        var MyFirst = React.createClass({
            getInitialState : function(){
                return {
                    myMessage: ['我是父组件data1','我是父组件data2','我是父组件data3',]
                }
            },
            render : function(){
                return (
                    <div>
                        <h3>父组件</h3>
                        <MySecond name={this.state.myMessage} />
                    </div>
                )
            }
        });
        var MySecond = React.createClass({
            render : function(){
                var msg = [];
                var message = this.props.name;
                message.forEach(function(value,key){
                    msg.push(
                        <p key={key}>我的消息{key}:{value}</p>
                    )
                })
                return (
                    <div>
                        {msg}
                    </div>
                )
            }
        })
        var haFirst = ReactDOM.render(
            <MyFirst />,
            document.getElementById("test"),
            function(){
                console.log('编译完成!');
            }
        )
    </script>

有的时候父组件传过来的数据类型跟子组件需要的类型不一样,那该怎么办呢?

PropTypes属性,就是用来验证组件实例的属性是否符合要求

var MyTitle = React.createClass({
  propTypes: {
    title: React.PropTypes.string.isRequired,
  },

  render: function() {
     return <h1> {this.props.title} </h1>;
   }
});

PropTypes的类型有很多:

React.PropTypes.array
React.PropTypes.bool
React.PropTypes.func
React.PropTypes.number
React.PropTypes.object
React.PropTypes.string
React.PropTypes.node
React.PropTypes.element

  

若属性不符合要求此外,我们可以用getDefaultProps 方法可以用来设置组件属性的默认值

    <script type="text/babel">
        var MyFirst = React.createClass({
            getInitialState : function(){
                return {
                    myMessage: ['我是父组件data1','我是父组件data2','我是父组件data3',]
                }
            },
            render : function(){
                return (
                    <div>
                        <h3>父组件</h3>
                        <MySecond />
                    </div>
                )
            }
        });
        var MySecond = React.createClass({
            getDefaultProps  : function(){    //设置默认值
                return {
                    name : [,,]
                }
            },
            PropTypes : {              //定义变量的类型:数组且必须
                name : React.PropTypes.array.isRequired
            },
            render : function(){
                var msg = [];
                var message = this.props.name;
                message.forEach(function(value,key){
                    msg.push(
                        <p key={key}>我的消息{key}:{value}</p>
                    )
                })
                return (
                    <div>
                        {msg}
                    </div>
                )
            }
        })
        var haFirst = ReactDOM.render(
            <MyFirst />,
            document.getElementById("test"),
            function(){
                console.log('编译完成!');
            }
        )
    </script>

如上:父组件如果没有给子组件传值,或者传值的类型不对,子组件将自动调用默认值1,2,3

PS:当你在写react的时候报了类似于这样子的错:Each child in an array or iterator should have a unique “key” prop.

解决办法只要在循环的每个子项添加一个key就行了,代码如下:

var names = ['Alice', 'Emily', 'Kate'];

ReactDOM.render(
    <div>
        {
          names.map(function (name, key) {
            return <div key={key}>Hello, {name}!</div>
          })
        }
    </div>,
    document.getElementById('example')
);

React学习笔记(三) 组件传值的更多相关文章

  1. angular学习笔记 父子组件传值

    一.如何将父组件的值传到子组件? 在子组件里面引入Input,然后用@Input 变量1 接收 接着在父组件中的,子组件标签上添加[msg]="msg",中括号里的名字要与子组件中 ...

  2. 【React】react学习笔记03-React组件对象的三大属性-state

    今天晚上学习了React中state的使用,特做此记录,对于学习的方式,博主仍然推荐直接复制完整代码,对着注释观察现象!: 上文中,我列举了两种React自定义组件的声明,这里我拿方式二进行举例: / ...

  3. React学习笔记(二) 组件状态

    组件的状态(this.state): 组件免不了要与用户互动,React 的一大创新,就是将组件看成是一个状态机,一开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新渲染 UI getIni ...

  4. React学习笔记 - 组件&Props

    React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你 ...

  5. 【React】react学习笔记02-面向组件编程

    react学习笔记02-面向组件编程 面向组件编程,直白来说,就是定义组件,使用组件. 以下内容则简单介绍下组建的声明与使用,直接复制demo观测结果即可. 步骤: 1.定义组件   a.轻量组件-函 ...

  6. react学习笔记1--基础知识

    什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...

  7. React学习笔记 - 元素渲染

    React Learn Note 3 React学习笔记(三) 标签(空格分隔): React JavaScript 二.元素渲染 元素是构成react应用的最小单位. 元素是普通的对象. 元素是构成 ...

  8. React学习笔记 - JSX简介

    React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...

  9. React学习笔记 - Hello World

    React Learn Note 1 React学习笔记(一) 标签(空格分隔): React JavaScript 前.Hello World 1. 创建单页面应用 使用Create React A ...

随机推荐

  1. JS小知识点----基本包装类型和引用类型

    var s1 = "some text"; s1.color = "red"; alert(s1.color);  //弹出 underfined var s1 ...

  2. centOS 下解压 rar zip 文件

    闲话不说,centos上如何安装rar.unrar在线解压缩软件呢?如果您的centos是32位的,执行如下命令: wget http://www.rarsoft.com/rar/rarlinux-3 ...

  3. yii中上传图片及文件

    Yii 提供了 CUploadedFile 来上传文件,比如图片,或者文档. 官方关于这个类的介绍 : http://www.yiichina.com/api/CUploadedFile CUploa ...

  4. Shell编程笔记

    Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理.   修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...

  5. sql server 查看表结构说明

    select c.name as [字段名],t.name as [字段类型] ,convert(bit,c.IsNullable) as [可否为空] ,convert(bit,case when ...

  6. 利用URL重写实现参数目录化

    参数目录化,就是将 类似 http://www.abc.com/store/store.aspx?id=1024 这样的网址,对外改为 http://www.abc.com/1024. 要实现这种功能 ...

  7. 使用val()方法设置表单中的默认选中项

    有时候我们展示给用户的表单中的checkbox,radio,selec等标签的一些项是默认选中的.比方:当用户改动文章的时候,假设相应的栏目为下拉框的话,那么它的默认选中值应该是原来的栏目位置. 能够 ...

  8. 安装Win7和Ubuntu12.04双系统后,意外删除Ubuntu12.04引导文件,出现error:unknown filesystem;grub rescue>错误的解决方案

    很久之前在Win7基础上安装了Ubuntu12.04系统,采用硬盘安装的方法.分了1个10G的硬盘分区F盘用于存放Ubuntu12.04的引导文件,其实完全可以制作一个Ubuntu12.04的U盘启动 ...

  9. 阿里云部署Docker(7)----将容器连接起来

    路遥知马力.日久见人心.恩. 该坚持的还是要坚持. 今天看到一个迅雷的师弟去了阿里,祝福他,哎,尽管老是被人家捧着叫大牛.我说不定通过不了人家的面试呢.哎,心有惭愧. 本文为本人原创,转载请表明来源: ...

  10. Android M(6.0) 权限爬坑之旅

    坑一:用Android5.0编译的apk,在Android6.0上运行完全没有问题. 在Android6.0以上才需要在运行时请求权限,在旧Android版本上保留原有逻辑,安装时授予权限. 用旧版本 ...