react雕刻网站——react组件(5)

let's go!!····································




我们可以看有报错


问题出在这里



无报错

如果组件中想用变量传进数值来表示呢



这时候会有一个报错

我们缺少了一个super()函数


我们通过取父级的props指针,通过super函数传递,来指定当前的状态值,在调用的时候需要调用this.state.name来获取相应的变量值

展示如图

那么如何让改变状态值呢。手动更改当然可以,但是明显的不可取,这里我们用setstate方法进行更改

这里的setState方法是从React.Component方法中继承过来的,可以更改状态对象的值

接下来我想实现通过按钮来增加上面的相应的岁数


代码截图


运行代码,此时浏览器报出一个错误

这是因为this指针的指向不明确,按钮的this方法中传递的this.state并找不到相应的state值,也就是说相应的this指针指向不明确,

如果我们需要引用当前的state值,我们需要在声明当前的状态值的时候,绑定this指针的指向


这样就可以了

然而我们每写一个事件就需要绑定一次this,这样的写法其实是繁琐的,

我们可以通过下面的写法即箭头函数来修订作用域


完整JSX

import React from "react";

import ReactDOM from "react-dom";

// import ReactSwiper from 'reactjs-swiper';

import "./index.scss"

class ES6Component extends React.Component{

    constructor(props){

        super(props)

               this.state={

                   name:"wangpenglu",

                   age:12

               }

            //    this.handleClick=this.handleClick.bind(this)

    }

    handleClick(){

       this.setState({

        age:this.state.age+1

       }) 

    }

    render(){


        return(

        <div>

            <h1>我叫{this.state.name},我今年{this.state.age}岁了</h1>

            <button onClick={(e) =>{this.handleClick(e)}}>加一岁</button>

        </div>

        );

    }

}

ReactDOM.render(

          /*组件的返回方法*/

     <div>

        <ES6Component/>

    </div>,

    document.getElementById("app")

);

同时如果我们需要一个输入框来实现状态值的改变



e.target。value是输入框的值

代码之间的组件套用




完整的JSX

import React from "react";

import ReactDOM from "react-dom";

// import ReactSwiper from 'reactjs-swiper';

import "./index.scss"

class ES6Component extends React.Component{

    constructor(props){

        super(props)

               this.state={

                   name:"wangpenglu",

                   age:12

               }

            //    this.handleClick=this.handleClick.bind(this)

    }

    handleClick(){

       this.setState({

        age: this.state.age+1

       }) 

    };

    handleOnChange(e){

        this.setState({

            age: e.target.value

        })

    }

    render(){


        return(

        <div>

            <h1>我叫{this.state.name},我今年{this.state.age}岁了</h1>

            <button onClick={(e) =>{this.handleClick(e)}}>加一岁</button>

            <input type="text" onChange={(e) =>{this.handleOnChange(e)}} />

        </div>

        );

    }

}

class App extends React.Component{

    render(){

        return(

            <div>

            {/*容器组件的套用*/}

            <Title>

                <span>111</span>

                <a>123</a>

            </Title>

            <hr/>

            {/*单纯组件的套用*/}

            <ES6Component/>

            </div>

        )

    }

}

class Title extends React.Component{

    constructor(props){

        super(props)

    }

    render(props){

       return(

       <h1>{this.props.children}</h1>

       )

    }

}

ReactDOM.render(

          /*组件的返回方法*/

     <div>

        <App/>

    </div>,

    document.getElementById("app")

);

// let ReactSwiperExample = () => {

//     const items = [{

//       image: 'http://i0.cy.com/xtl/pic/2020/01/14/main.jpg',

//       title: '图片1',

//       link: 'http://jd.com'

//     }, {

//       image: 'http://i0.cy.com/xtl/pic/2020/02/02/main_a1.jpg',

//       title: '图片2',

//     }, {

//       image: 'http://i0.cy.com/xtl/pic/2020/01/14/main.jpg',

//       title: '图片3',

//       link: 'http://jd.com'

//     }, {

//       image: 'http://i0.cy.com/xtl/pic/2020/02/02/main_a1.jpg',

//       title: '图片4',

//     }];


//     const swiperOptions = {

//       preloadImages: true,

//       autoplay: 4000,

//       autoplayDisableOnInteraction: false

//     };

//     return (

//       <ReactSwiper swiperOptions={swiperOptions} showPagination items={items}

//                    className="swiper-example" />

//     );

//   };


//   ReactDOM.render(

//     <ReactSwiperExample />, document.getElementById('app')

//   );

// let jsx = <div className="jsx" >jsx......</div>

// ReactDOM.render(

//     jsx,

//     document.getElementById("app")

// );

怎末通过子组件改变父组件的状态值


子组件改变父组件的样式

子元素改变父元素用props,父元素设置当前的状态,在Father组件中设置颜色后传到子组件中

并传送一个callback函数进行数据的回调,在子组件中使用this.props向父级传送参数,实现数据更换

完整的jsx

import React from "react";

import ReactDOM from "react-dom";

// import ReactSwiper from 'reactjs-swiper';

import "./index.scss"

class Child extends React.Component{

    constructor(props){

        super(props)


    }

    handleClick(){

       this.props.changeColor("#333")

    };

    render(){

        return(

        <div>

            <h1>父组件的背景色: {this.props.bgColor}</h1>

            <button onClick={(e) =>{this.handleClick(e)}}>改变父组件的背景颜色</button>

        </div>

        );

    }

}

class Father extends React.Component{

    constructor(props){

        super(props);

        this.state={

             bgColor:"#399"

        }

    }

    callback(color){

        this.setState({

            bgColor:color

        })

    }

    render(props){

       return(

        <div style={{background:this.state.bgColor}}>

        <Child bgColor={this.state.bgColorbgColor} changeColor={(color) =>{this.callback(color)}}/>

        </div>

       )

    }

}

ReactDOM.render(

          /*组件的返回方法*/

     <div>

       <Father/>

    </div>,

    document.getElementById("app")

);

// let ReactSwiperExample = () => {

//     const items = [{

//       image: 'http://i0.cy.com/xtl/pic/2020/01/14/main.jpg',

//       title: '图片1',

//       link: 'http://jd.com'

//     }, {

//       image: 'http://i0.cy.com/xtl/pic/2020/02/02/main_a1.jpg',

//       title: '图片2',

//     }, {

//       image: 'http://i0.cy.com/xtl/pic/2020/01/14/main.jpg',

//       title: '图片3',

//       link: 'http://jd.com'

//     }, {

//       image: 'http://i0.cy.com/xtl/pic/2020/02/02/main_a1.jpg',

//       title: '图片4',

//     }];


//     const swiperOptions = {

//       preloadImages: true,

//       autoplay: 4000,

//       autoplayDisableOnInteraction: false

//     };

//     return (

//       <ReactSwiper swiperOptions={swiperOptions} showPagination items={items}

//                    className="swiper-example" />

//     );

//   };


//   ReactDOM.render(

//     <ReactSwiperExample />, document.getElementById('app')

//   );

// let jsx = <div className="jsx" >jsx......</div>

// ReactDOM.render(

//     jsx,

//     document.getElementById("app")

// );


如果想要兄弟之间传值


例如通过1的按钮改变2十五颜色


他们是兄弟关系




所以我们可以通过把通过1传值给父元素,通过父元素传值给2来进行兄弟组建的相互传值

props是数值转换时需要的,只要组件中有this指针的使用,就用该使用super()函数

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容

  • react生命周期提供了几个很重要的节点。其实就是一些触发的事件来让组件更方便的处理各种场景。 在执行西安免得代码...
    荒城2020阅读 228评论 0 0
  • 40、React 什么是React?React 是一个用于构建用户界面的框架(采用的是MVC模式):集中处理VIE...
    萌妹撒阅读 1,016评论 0 1
  • React:创建一个简单的 JSX 元素 React 是由 Facebook 创建和维护的开源视图库。它是渲染当代...
    HJSD阅读 905评论 0 1
  • 现在最热门的前端框架,毫无疑问是 React 。上周,基于 React 的 React Native 发布,结果一...
    sakura_L阅读 431评论 0 0
  • 关于JSX 考虑这样一段代码:const element = Hello, world! ;这段代码既不是字符串...
    带三本书阅读 370评论 0 1