react的基本使用

react的基本使用:

1)下载react.js,并引用react.js。
2)还需要引入react-dom.js
3)通过React.createElement创建虚拟DOM
4)把虚拟DOM挂载到真实的DOM上
js压缩包链接:
链接: https://pan.baidu.com/s/1bOug2U1rxNPLFnR6EgDBEA 提取码: 43ij

创建虚拟元素(虚拟DOM)的两种方式:

1)React.createElement 现在基本上不用

<div id="app"></div>
<script>
    // createElement 参数1表示要创建什么样的虚拟DOM   参数2虚拟DOM的属性  参数3虚拟DOM中的内容
    let vDom = React.createElement('h1',{title:"hello react"},"hello react");
    // render 参数1表示虚拟DOM  参数2表示把虚拟DOM挂载到哪个真实DOM上
    ReactDOM.render(vDom,document.getElementById("app"))
</script>

2)JSX语法

	<div id="app"></div>
	<!-- type="text/babel" 必写,因为需要babel对jsx语法进行编译 -->
    <script type="text/babel">
        // 创建一个虚拟DOM(通过JSX写法)   默认情况下,你写的JSX,浏览器是不能识别
        // <h1 title="hello react">Hello React</h1> 不能叫真实DOM  可以叫JSX元素,虚拟DOM,JSX对象
        let vDOM = <h1 title="hello react">Hello React</h1>
        ReactDOM.render(vDOM,document.getElementById("app"))
    </script>

jsx总结:
1)JSX本质就是一个虚拟DOM,最外层必须使用一个唯一的根标签进行包裹。
2)JSX中的标签是成对出现的,如果是单标签也需要闭合
3)JSX中的如果放JS代码,JS代码必须写在{}中
4)JSX中中的{}中,可以放JS表达式(任何有值的内容都是表达式)
5)JSX中要写注释,注释也需要放在{}中 {/* */}
6)JSX中要写行内样式,style={{color:‘red’}}
7)JSX中的如果写class属性,需要写成className,写for属性,需要写成htmlFor
8) jsx元素外面包一个() 表示jsx元素是一个整体

在html中引入js:

1)引入react.js 类似于vue.js 2)引入react-dom.js 提供了dom操作的扩展 3)引入一个babel.js 可以把jsx语法,转成createElement语法

JXS中循环数据必须用map

    <script type="text/babel">
        let students = [
            {name:"彭万里",age:10},
            {name:"高大山",age:11},
            {name:"谢大海",age:12},
            {name:"马宏宇",age:13},
            {name:"林莽",age:14},
        ]
        let vDOM = (<ul>
           { students.map((item,index)=>{
                return <li key={index}>{item.name}----{item.age}</li>
           }) }
        </ul>);
        ReactDOM.render(vDOM,document.getElementById("app"))
    </script>

在react中创建组件有两种方式:

1)通过类的形式创建组件 目前还是主流
2)通过函数的形式创建组件 以后肯定是主流

在react中,为了和普通的html标签区分,规定了,react中的组件名必须大写。

函数式组件(无状态组件)

1)函数中必须return一个JSX
2)函数名必须大写,表示是一个组件名

     <div id="app"></div>
     <script type="text/babel">
        // 如果一个函数reutrn了一个jsx,那么这个函数就可以称为一个组件
        function Header(){
            return(
                <div>
                    <h1>我是Header组件</h1>
                </div>
            )
        }
        // render的第1个参数可以是一个组件,之前render的是一个虚拟DOM
        // 在react中,使用组件当成html标签来使用就OK了
        ReactDOM.render(<Header />,document.getElementById("app"))
     </script>

class组件:

1)类名也需要大写 类名表示组件名
2)要把一个class当成一个组件,必须extends React.Component
3)在类中,必须有一个钩子函数,这个钩子函数叫render
4)在render函数中,必须去return一个JSX

     <div id="app"></div>
     <script type="text/babel">
        class Header extends React.Component{
            render(){
                return (
                    <div>
                        <h1>我是一个Header组件</h1>
                    </div>
                )
            }
        }
        ReactDOM.render(<Header />,document.getElementById("app"))
     </script>

ReactDOM.render渲染组件的流程:

1)判断渲染的是否是一个组件,判定的依据是看首字母是否大写。
2)如果是组件,判断你的组件是通过函数创建地,还是通过类创建的。

 A)如果是函数创建的,得到函数的返回值,函数的返回值是一个JSX,从而得到虚拟DOM
 B)如果是class创建的,自动调用render钩子函数,这个钩子函数也是返回一个JSX,从而得到虚拟DOM

3)有了虚拟DOM,react内部就会把虚拟DOm转化成真实DOM
4)把转化后的真实DOM,挂载到app上面的

使用函数创建组件,此组件的数据源只能是props,说白了,函数内部不能有自己的状态,数据完全靠外面传入。
对传入的数据进行校验:使用prop-types.js

     <div id="app"></div>
     <script type="text/babel">
        //  props是形参 写abc也可以  通常会写props
        function MyHeader(props){
            return (
                <div>
                    <h1>
                        名字:{props.name},
                        年龄是:{props.age}, 
                        分数是:{props.score}, 
                        地址:{props.address},
                        isMerry: { props.isMerry }
                    </h1>
                    <ul>
                        {
                            props.hobby.map((item,index)=>{
                                return <li key={index}>{item}</li>
                            })
                        }
                    </ul>
                </div>
            )
        }
        // 对接收的数据进行校验
        MyHeader.propTypes = {
            name:PropTypes.string,
            address:PropTypes.string.isRequired
        }
        // 对接收的数据设置默认值
        MyHeader.defaultProps = {
            isMerry:"false"
        }
        // name="wc" 叫自定义属性  wc是字符串  100也是字符串 99是nubmer
        ReactDOM.render(<MyHeader name="wc" age="100" score={ 99 } address="bj" hobby={ ['basketball','football'] } />,document.getElementById("app"))
     </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值