初学React(一)

英文官网:https://reactjs.org/

中文官网:https://doc.react-china.org/

React的特点

1、声明式编程

2、组件化编程

3、支持客户端与服务器渲染

4、高效

5、单向数据流

React高效的原因

1、虚拟DOM,不总是直接操作DOM

2、DOM Diff 算法,最小化页面重绘

相关js库

react.js:React的核心库

react-dom.js:提供操作DOM的react扩展库

babel.min.js:解析JSX语法代码转为纯JS语法代码的库

React的基本使用(从Hello world开始)

1.在页面中导入js

<script src="react.development.js"></script>

<script src="react-dom.development.js"></script>

<script src="babel.min.js"></script>

2.进行代码编写

 <div id="root"></div>
 <div id="container"></div>
<script type="text/babel">
            let vDom=<h1>hello world!</h1>   //不加引号
             //渲染虚拟DOM到页面真实DOM容器中
            ReactDOM.render(vDom,document.getElementById('root'))
            let names=['gmx','tom','alice'];
            ReactDOM.render(
                <div>{
                    names.map(function (name) {
                        return <div key={name}>Hello,{name}!</div>
                    })
                }</div>,
                document.getElementById('container')
            ) 
    </script>

注意:HTML语言直接写在JS语言中,不加任何引号,这就是JSX(全称:JavaScript XML)的语法

组件属性;ReactJS是基于组件化的开发,允许将代码封装成组件(component)然后像插入普通HTML标签一样,在网页中插入这个组件,React.createClass方法可以用于生成一个组件类

<script type="text/babel">
            let Greet=ReactDOM.createClass({
                render:function(){
                    return <h1>Hello {this.props.name}</h1>;
                }
            });
            ReactDOM.render(
                <Greet name='gmx' />,
                document.getElementById('root')
            )
</script>

但是控制台报错了:

ncaught TypeError: ReactDOM.createClass is not a function

查了一下是因为react最新版本抛弃了createClass这个函数,为了配合ES6,与时俱进,最新版本使用的是ES6,不支持以前的createClass方法了

下面的是新版本:

<script type="text/babel">
            class Greet extends React.Component{
                render(){
                    return(
                        <h1>Hello {this.props.name}</h1>
                    )
                }
            }
            ReactDOM.render(
                <Greet name='gmx'/>,
                document.getElementById('root')
            )
    </script>

注意:获取属性的值用的是this.props.属性名、创建的组件名称首字母必须大写、为元素添加css的class时,使用className、组件的style属性的设置方式也值得注意,要写成style={{width:this.state.width}}、变量名用{}包裹,且不能加双引号

组件&props

组件可以将ui切分成一些独立的、可复用的部件,这样你就只需要专注于构建每一个单独的部件

有两种方式定义组件:

1.函数定义组件:

function welcome(props){
  return <h1>Hello,{props.name}</h1>
}

2.类(ES6 class)定义组件

class welcome extends React.Component{
     render(){
        return <h1>Hello,{this.props.name}</h1>;
  }
}

看一个例子

function Welcome(props){
               return <h1>Hello,{props.name}</h1>
           }
           const element=<Welcome name='gaominxue' />
           ReactDOM.render(
               element,
               document.getElementById('root')
               );

解析:

我们对<Welcome name="gaominxue" />元素调用了ReactDOM.render()方法

React将{name: 'gaominxue'}作为props传入并调用Welcome组件

Welcome组件将<h1>Hello, gaominxue</h1>元素作为结果返回

React DOM将DOM更新为<h1>Hello, gaominxue</h1>

组合组件,组件之间还可以嵌套:

 function Welcome(props){
               return <h1>Hello,{props.name}</h1>
           }
           function App(){
               return (
                   <div>
                      <Welcome name='gao'/>
                      <Welcome name='min'/>
                      <Welcome name='xuexue'/>
                    </div>
               )
           }
           ReactDOM.render(
               <App />,
               document.getElementById('root')
               );

App此时也是一个组件,内部包含Welcome组件,特别注意一点的就是组件的返回值只能有一个根元素。return 中使用一个div来包裹所有的元素。

在这里附上学习react的文档,我觉得特别好,特别适合刚学的同学:https://segmentfault.com/a/1190000011336838

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值