React(2)-函数组件

目录

函数组件(无状态组件)

1.函数组件定义

2.函数组件传值

3.组件复用

4.静态组件(函数组件),具备纯函数特点

5.单向数据流 + 组件组合案例

6.react实际项目开发流程

案例:评论模块


函数组件(无状态组件)

<body>

        <div id="app"></div>

        <script src="https://unpkg.com/react@17/umd/react.development.js" crossorigin></script>

        <script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js" crossorigin></script>

        <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

        <script type="text/babel">

1.函数组件定义

               jsx=>element=>component=>component tree=>application

                function Welcome(){   [注意:react中函数首字母大小写]

                        return <h1>hello world</h1>

                }

                const e = <Welcome></Welcome>

2.函数组件传值

                function Welcome(props){

                        console.log(props);

                        return <h1>hello world</h1>

                }

                //组件传值后,会封装 组件属性 =>对象{key:value}

                const e = <Welcome name = "jack"></Welcome>

                注意:组件属性不能直接放到 {} 中,会报错

                function Welcome(props){

                        console.log(props);

                        return <h1>hello world {props}</h1>

                } 报错:Objects are not valid as a React child

               正确用法:

                function Welcome(props){

                        console.log(props);

                        return <h1>hello {props.name}</h1>

                }

                const e = <Welcome name = "jack"></Welcome>

3.组件复用

                function Welcome(props){

                        return <h1>hello {props.name}</h1>

                }

                const e =

                        <div>

                                <h1>hello page</h1>

                                <Welcome />

                                <Welcome></Welcome>

                                <Welcome name = "jack"></Welcome>

                        </div>

                 babel转化:Babel · The compiler for next generation JavaScript (babeljs.io)

                const e =

                        React.createElement("div", null,                 

                        React.createElement("h1", null, "hello page"),

                        React.createElement(Welcome, null),

                        React.createElement(Welcome, null),

                        React.createElement(Welcome, { name: "jack"  }));

                组件的虚拟DOM解析:

                {

                        type:"div"

                        props:{

                                children:[

                                        {

                                        type:"h1",

                                        props:{children:"hello page"}

                                        },

                                        {

                                        type:f Welcome(props),

                                        props:{children:"hello page"}

                                        },

                                        {

                                        type: Welcome(props),

                                        props:{}

                                        },

                                        {

                                        type: Welcome(props),

                                        props:{}

                                        },

                                        {

                                        type:Welcome(props),

                                        props:{name="jack"}

                                        },

                                ]

                        }

                }

              虚拟DOM=>type判断(如果是函数,则自动执行,并把props传入函数)=>真实DOM

4.静态组件(函数组件),具备纯函数特点

                 _PURE_不可改变,只返回视图

                纯函数:function fn(props){} 传入相同的参数,返回相同的值

                function sum(a,b){

                        return a+b

                }

                console.log(sum(1,2)) //属于纯函数,传入相同的值,返回的值始终相同

                不纯函数:传入相同的参数,可能返回不同的值,具有可变性

               let p = 0

                function sum2(){

                        a = ++p

                        return a+b

                }

                console.log(sum(1,2))

                console.log(sum(1,2))

5.单向数据流 + 组件组合案例

扩展:瀑布流

                //需求:school - class - teachers / students - student / teacher

                function Teacher(props){

                        let {teacher} = props

                        return(

                                <div>

                                        <h3>teachers {teacher}</h3>

                                </div>)

                }

                function Student(props){

                        let {student} = props

                        return (

                                <div>

                                        <h3>student {student}</h3>

                                </div>)

                }

                function Class(props){

                        let {name,teacher,students} = props.class1

                        return(

                                <div>

                                        <h2>class : {name}</h2>

                                        <Teacher teacher={teacher }/>

                                        <Student student={students[0]} />

                                        <Student student={students[1]}/>

                                        <Student student={students[2]}/>

                                </div>)

                }

                function School(props){

                        let {name,classs} = props.school1

                        return(

                                <div>

                                        <h1>school {name}</h1>

                                        <Class class={classs[0]}/>

                                        <Class class={classs[1]}/>

                                        <Class class={classs[2]}/>

                                </div>)

                }

                //学校信息采集(学校 班级 老师 学生) =>数据库 =>api =>client(web) =>数据传递

                let data= {

                        school:{

                                name:"一中",

                                classs:[

                                        {

                                                name:"一班",
                                                teacher:"Mr.Wang",

                                                students:["张三","李四","王二麻子"]

                                        },

                                        {

                                                name:"二班",
                                                teacher:"Mr.Li",

                                                students:["张三","李四","王二麻子"]

                                        },

                                        {

                                                name:"三班",
                                                teacher:"Mr.Zhao",

                                                students:["张三","李四","王二麻子"]

                                        },

                                ]

                        }

                }

                const e = <School  school1={data.school} / >

                //ReactDOM react元素(虚拟DOM)同步(优化算法)真实DOM

                ReactDOM.render(e,document.getElementById("app"))

        </script>

</body>

6.react实际项目开发流程

需求调研=>需求分析=>产品原型=>保真图(设计)

研发部门:技术经理=>技术分析(前台 后台 app 后端)

任务分解:具体模块

程序员:静态页面(html+css+js特效)=>react组件(大组件)=>组件抽离(小组件)=>获取接口数据(接口规范)=>数据同步到组件上

案例:评论模块

//头像复用

function Avator(props){

        return (

                        <img className = "Avatar" src="假装有图片地址链接" alt = "girl">

        )

}

//用户信息复用

function User(props){

        return (

                        <div className = "UserInfo">

                        <Avator />
                                <div className = "UserInfo-name">张三</div>

                        </div>

        )

}

//评论复用

function Content(props){

        {/*评论内容*/}

        <div className = "Comment-text">comment content</div>

}

//日期复用

function Date(props){

        {/*日期内容*/}

        <div className = "Comment-date">2022-08-20</div>

}

//重构组件 => 获取信息 =>同步数据

var data = {

        author:{

                name:"jack",

                avator:"假装有图片地址链接"

        },

        content:"aaa-bbb-ccc"

        date:“2022-08-20”

}

function Comment(props){

        return (
                <div className = "comment">

                        <Avatar />

                        <User />

                        <Content />
                        <Date />

                </div>

        )

}

const e = <Comment data={data}/>

ReactDOM.render(e,document.getElementById("app"))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值