<div id='root'></div>
    <script src="./react.js"></script>
    <script src="./react-dom.js"></script>
    <script src="./babel.min.js"></script>
    <script type="text/babel">
    //props用于接受组件的属性的对象
   class MyApp extends React.Component{
    //必须要设置render函数
     render() {
       return (
         <div>
            <h1>{this.props.title}</h1>
            {/* JSX中在页面上不显示的数据有:undefined,null,true,false*/}
            <p>{this.props.content}</p>
            <p>{null}</p>
            <p>{true}</p>
            <p>{false}</p>
            <p>{NaN}</p> {/*有结果,NaN */}
            <p>{this.props.content}</p> {/*有结果,NaN */}
            <p>{this.props.arr}</p>{/*数组在jsx中会自动展开,aaabbbccc */}
            <p>{this.props.obj.name}</p>{/*对象在jsx中不会自动展开,会报错,只能去对象的值不会报错 */}
          </div>
       )
     }
   }
   //props用于父组件给子组件传递数据的,自上而下传,可以传递任何数据(string,number,boolean.num,undefined,object(object包括Array和function))
    ReactDOM.render(
      <MyApp title="app标题" content={23} arr={['aaa','bbb','ccc']} obj={{name:'lili',age:12}} />,document.getElementById('root'))

    </script>

06-组件组合

 <div id='root'></div>
    <script src="./react.js"></script>
    <script src="./react-dom.js"></script>
    <script src="./babel.min.js"></script>
    <script type="text/babel">
    //props用于接受组件的属性的对象
   class App extends React.Component{
    //必须要设置render函数

    //fn本质上实在App.prototype上,new App()的时候就能调用到fn,this就能找找到fn
    fn(a){
         alert(a)
       }
     render() {

       return (
         <div>
            <h1>App标题</h1>
            {/*属性命名用驼峰*/}
            <Child myContent={this.props.content} show={this.fn}></Child>
          </div>
       )
     }
   }

//child也是继承react.Component不是继承App  App里的值会自己传过来
//对child来说,他传过来的属性是myContent
//传函数对象会有this问题
   class Child extends React.Component{
     //定义render函数
     render(){
       //定义Child模板
       return(<section>
        <p>{this.props.myContent}</p>
        {/*通过这种方式可以把子组件的值传给父组,通过函数对象*/}
        <button onClick={()=>{this.props.show('hello,i am child')}}>子组件内容...</button>
        </section>)
     }
   }

    ReactDOM.render(
      <App  content='传递给Child的内容'/>,document.getElementById('root'))



      //组件的调用过程
      //1)调用ReactDOM.render函数,把组件上的属性转为JSON对象
      //2)class创建实例对象  把JSON对象给props属性
      //3)通过创建的实例,调用render函数,得到jsx对象
      //4)reactDOM会将render函数返回值生成虚拟DOM渲染到页面上 render返回值会替换到组件
    </script>

07-props的默认值设置

 <div id='root'></div>
    <script src="./react.js"></script>
    <script src="./react-dom.js"></script>
    <script src="./babel.min.js"></script>
    <script type="text/babel">
    //props用于接受组件的属性的对象
   class App extends React.Component{

     render() {
         //没有设置title值就为undefind  不展示。但可以有属性默认值
       return (
         <div>
            <h1>{this.props.title}</h1>
            <h1>{this.props.content}</h1>
          </div>
       )
     }
   }
//属性的默认值
//对于函数式组件和React.Component组件,定义属性默认值的方式为:在类名上定义一个属性defalutProps
//函数式组件也一样,只不过类名变为函数名
//没有值用默认值,有值就用值不用默认值
App.defaultProps={
  title:'hello,world', //默认的属性值
  content:'aaaa'
}
    ReactDOM.render(
      <div><App  content='传递给Child的内容'/></div>,document.getElementById('root'))

    </script>

08-props的默认值设置

<div id='root'></div>
    <script src="./react.js"></script>
    <script src="./react-dom.js"></script>
    <script src="./babel.min.js"></script>
    <script type="text/babel">
    //props用于接受组件的属性的对象
   const App = React.createClass({
     //react.createClass多一种设置默认值得方法
    getDefaultProps(){
      return {
        title:'hello,world'
      }
    },
     render() {
         //没有设置title值就为undefind  不展示。但可以有属性默认值
       return (
         <div>
            <h1>{this.props.title}</h1>
            <h1>{this.props.content}</h1>
          </div>
       )
     }
   })
//属性的默认值
//对于函数式组件和React.Component组件,定义属性默认值的方式为:在类名上定义一个属性defalutProps
//函数式组件也一样,只不过类名变为函数名
//没有值用默认值,有值就用值不用默认值
// App.defaultProps={
//   title:'hello,world', //默认的属性值
//   content:'aaaa'
// }
    ReactDOM.render(
      <div><App  content='传递给Child的内容'/></div>,document.getElementById('root'))

    </script>
02-13 16:09