React學習筆記(三) 組件傳值

來源:互聯網
上載者:User

標籤:

組件嵌套後,父組件怎麼向子組件發送資料呢?

答案是: 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.arrayReact.PropTypes.boolReact.PropTypes.funcReact.PropTypes.numberReact.PropTypes.objectReact.PropTypes.stringReact.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 : [1,2,3]                }            },            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學習筆記(三) 組件傳值

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.