美文网首页
深入浅出React和Redux(一) prop和state

深入浅出React和Redux(一) prop和state

作者: 土豪码农 | 来源:发表于2018-08-18 19:46 被阅读0次

    买了本书,好好来深入浅出一下吧!
    react和vue一样,最核心的一个就是组件化的思想,每个组件分而治之,把一个个小的模块最后组成一个大的作品,有利于复用和各种维护

    从第二章开始记录起
    如何吧一个个组件串联起来,最后组成一个完整的作品呢?首先要解决每个组件间的联系吧!

    prop

    这个用于接收组件外部的数据,接收了数据就可以处理或者展示.当然如果组件要把数据返回给外部,也是可以用prop的

    传递prop值
    <Mycomponent num={10}></Mycomponent>
    

    这就是一个封装好的组件,传值的时候可以支持任何js的数据类型,只要不是字符串都用大括号包着

    读取prop值
    class MyComponent extends Component {
        constructor(props) {
            super(props)
            this.state = {
                num : props.num
            }
        }
        render() {
            return (
                <div className="MyComponent">
                    <p>{this.state.num}</p>//或者直接调用this.props.num也是可以的
                </div>
            );
        }
    }
    

    constructor是构造函数,书上写着,如果要定义构造函数第一行就要super(props)调用一下,否则就无法通过props读取到传值,当然如果不调用constructor的话,也是不用super的

    propTypes检测

    读取和传递都解决了,但是肯定要对传递的数据做一个规范,
    1,组件支持哪些prop
    2.每个prop应该是怎么样的格式
    要引入propTypes,然后通过下面的方法设置一下就可以设置传递的参数,即使你不按照规则,好像页面也不会有问题,只是console里面会报错而已,propTypes原来只是辅助开发功能而已,并不能强硬的限制传递的参数

    import React, {Component} from 'react';
    import propTypes from 'prop-types';
    
    
    class MyComponent extends Component {
        render() {
            return (
                <div className="MyComponent">
                    <p>{this.props.num}</p>
                </div>
            );
        }
    }
    MyComponent.propTypes = {
        num:propTypes.number
    }
    export default MyComponent;
    

    上面就是外部传递的数据了,接下来到内部自己处理的数据,为什么需要这个呢,因为外部传递的prop是不能修改的,所以要把它赋值给内部的state里面,然后就可以随意使用的修改了

    组件的state

    初始化state

    通常会在组件的构造函数结尾初始化state

    import React, {Component} from 'react';
    class MyComponent extends Component {
        constructor(props){
            super(props)
            this.state={  //必须是一个对象
                num:props.num || 0  //这里是初始化state的地方,因为也有可能不会传值,所以要||
            }
        }
        render() {
            return (
                <div className="MyComponent">
                    <p>{this.state.num}</p>
                </div>
            );
        }
    }
    
    MyComponent.defaultProps={
        num:5  //也可以利用这种设定去设置如果没有接收的参数设置为
    }
    
    export default MyComponent;
    
    读取和更新state

    更新state要调用一个叫setState的方法,按下面的方式调用一下就可以了

    addNum = () =>{
            this.setState(
                {num:this.state.num+1}
            )
        }
    

    至于为什么要调用呢?不可以直接赋值呢?在vue里面都是直接赋值直接更新的

    addNum = () =>{
            this.state.num = this.state.num++
        }
    

    像这种方式呢,其实state的数据是变了的,但是只是没有触发更新,要调用setState去刷新就可以看到数据的变化,这个和vue就有点不太一样了,但是感觉这样性能应该会高一点,当我需要的时候再去调用更新,和vue实时监测更新,这个应该是更加节省性能!

    总结一下:prop是外部传递的数据,state是内部储存和处理的数据,并且组件最好不要去改prop的数据,因为这样会导致各种混乱

    相关文章

      网友评论

          本文标题:深入浅出React和Redux(一) prop和state

          本文链接:https://www.haomeiwen.com/subject/lsaxiftx.html