React入门

一、使用react框架需要引入

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

定义一个组件:

(1)通过function定义一个组件

     需要有一个返回值作为组件的返回数据

function H() {
      return (<h1>我是一个标题</h1>)
    }

      在页面上渲染组件,参数一:组件名,参数二:挂载节点

ReactDOM.render(<H/>, document.getElementById('app'))

结果:

给组件传参:

ReactDOM.render(<H label="给组件H(props)传值"/>, document.getElementById('app'))

结果:

(2)通过class定义一个组件

     组件需要继承在React.Component上,组件内部有一个render方法,

class C extends React.Component {
      // render渲染函数,用来在页面上展示数据
      render() {
        return (<h5>我是组件C</h5>)
      }
    }

简单的组件传值:

class定义的组件中都有一个state方法,要想改变state,需要调用setState方法

结果:

使用className关键字设置样式:

<style>
    .dp {
      color: orangered;
    }
  </style>

结果:

 

从本地获取数据:

const { Component } = React;//利用解构赋值,获取React中的Component,以后React.Component可以简写为Component

假数据:

const list = [
  {
    name: 'Tom',
    age: 18
  }, {
    name: 'Jerry',
    age: 19
  }, {
    name: '巴斯光年',
    age: 29
  }
]

得到数据:

方法一:

class People extends Component {
  render() {
    return (
      <div>
        {list.map((item, index) => <p key={index}>{item.name}</p>)}
      </div>
    )
  }
}

方法二:

class People extends Component {
  render() {
    return (
      <div>
        {
          list.map((item, index) => {
            return (
              <div key ={index}>
                <p>名字是:{item.name},今年{item.age}岁了</p>
              </div>
            )
          })
        }
      </div>
    )
  }
}

结果:

从服务器获取数据:

  class Products extends Component {
    constructor(props) {//构造函数,初始化
      super(props)
      this.state = { //每一个class定义的组件都有一个state方法
        products: [],
      }
      axios.get('http://api.cat-shop.penkuoer.com/api/v1/products')
        .then(res => {
          //改变state,需要使用setState方法
          this.setState({
            products: res.data.products,
          })
        })
    }
    //当state数据改变的时候会重新调用render函数
    // 使用map循环生成数据
    render() {
      return (
        <div>
          {
            this.state.products.map(product => {
              return (
                <div key={product._id}>
                <img src= {'http://api.cat-shop.penkuoer.com' + product.coverImg} className="size"/>
                  <p>{product.name}</p>
                </div>
              )
            })
          }
        </div>
      )
    }
  }

父组件与子组件间的传值:

(1)父组件向自组件传值

父组件通过props传递数据到子组件,在子组件中使用this.props进行调用

在通过设置属性的方法向子组件传值后,可以查看到props中多了新增的属性和属性值

结果:

在子组件中使用this.props进行调用

结果:

(2)子组件向父组件传值

子组件向父组件传值使用方法调用(子组件调用父组件中的方法)

 

结果:

例二:

const { Component } = React;
  class Counter extends Component {
    constructor() {
      super()
      this.state = {
        count: 1,
      }
    }
    clickHandle() {
      this.setState({
        count: this.state.count + 1
      }, function() { // setState的参数二中的回调函数表示状态改变完成
        this.props.changeCurrentCount(this.state.count)
      })
    }
    render() {
      return (<button onClick={this.clickHandle.bind(this)}>值为:{this.state.count}</button>)
    }
  }

  class App extends Component {
    constructor(props) {
      super(props)
      this.state = {
        currentCount: 1,
      }
    }
    changeCurrentCountHandle(currentCount) {
      this.setState({
        currentCount
      })
    }
    render() {
      return (<div>
        <h4>当前计数器的值为:{this.state.currentCount}</h4>
        <Counter changeCurrentCount = {this.changeCurrentCountHandle.bind(this)} />
      </div>)
    }
  }
  ReactDOM.render(<App />, document.getElementById('app'))

 

 

!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Babel=t():e.Babel=t()}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return e[n].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}(function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))switch(typeof e[t]){case"function":break;case"object":e[t]=function(t){var r=t.slice(1),n=e[t[0]];return function(e,t,i){n.apply(this,[e,t,i].concat(r))}}(e[t]);break;default:e[t]=e[e[t]]}return e}([function(e,t,r){"use strict";function n(e,t){return g(t)&&"string"==typeof t[0]?e.hasOwnProperty(t[0])?[e[t[0]]].concat(t.slice(1)):void 0:"string"==typeof t?e[t]:t}function i(e){var t=(e.presets||[]).map(function(e){var t=n(E,e);if(!t)throw new Error('Invalid preset specified in Babel options: "'+e+'"');return g(t)&&"object"===h(t[0])&&t[0].hasOwnProperty("buildPreset")&&(t[0]=d({},t[0],{buildPreset:t[0].buildPreset})),t}),r=(e.plugins||[]).map(function(e){var t=n(b,e);if(!t)throw new Error('Invalid plugin specified in Babel options: "'+e+'"');return t});return d({babelrc:!1},e,{presets:t,plugins:r})}function s(e,t){return y.transform(e,i(t))}function a(e,t,r){return y.transformFromAst(e,t,i(r))}function o(e,t){b.hasOwnProperty(e)&&console.warn('A plugin named "'+e+'" is already registered, it will be overridden'),b[e]=t}function u(e){Object.keys(e).forEach(function(t){return o(t,e[t])})}function l(e,t){E.hasOwnProperty(e)&&console.warn('A preset named "'+e+'" is already registered, it will be overridden'),E[e]=t}function c(e){Object.keys(e).forEach(function(t){return l(t,e[t])})}function f(e){(0,v.runScripts)(s,e)}function p(){window.removeEventListener("DOMContentLoaded",f)}Object.defineProperty(t,"__esModule",{value:!0}),t.version=t.buildExternalHelpers=t.availablePresets=t.availablePlugins=v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值