React之状态(State)

在React当中,当你更新组件的state,然后新的state就会重新渲染到页面中。在这个时候不需要你操作任何DOM。你也可以认为组件在React当中是一个状态机(State Machines)。当用户进行操作时会实现不同的状态,然后再渲染到你的页面中,让你的页面与数据始终保持一致。

如果对状态不好理解的朋友,你可以认为状态即是数据!

现在我们先来通过ES6类React.Component完成一个通过点击按钮对DIV进行显示与隐藏的操作,效果如下:


咱们先将页面进行初始化:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #myDiv{
            width:200px;
            height:400px;
            background:red;
            color:yellow;
            border:1px solid green;
        }
    </style>
    <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react.development.js"></script>
    <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react-dom.development.js"></script>
    <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/babel.min_.js"></script>
</head>
<body>
    <div id="wrap"></div>
</body>
<script type="text/babel">
    class MyComponent extends React.Component{
        constructor(props){
            super(props);
            // 为当前状态添加isShow属性
            this.state={
                // 值为true显示,false为隐藏。默认值为true。
                isShow:true
            }
        }
        render(){
            //返回组件的初始内容
            return <div>
                <input type="button" value="显示与隐藏"/>
                <div id="myDiv">我在这里呀!</div>
            </div>
        }
    }
    ReactDOM.render(
        <MyComponent/>,
        document.querySelector("#wrap")
    )
</script>
</html>

到目前为止,页面已经初始化完毕了。在上面的代码中为state添加了一个默认值为true的属性isShow。isShow用来控制div的显示与隐藏!当isShow为true时显示,为false时隐藏
接下来要完成的二件事。

  • 第一件事是要为按钮增加一个点击事件,事件与changeState方法进行绑定。当点击按钮时改变isShow的状态,也就是要为 isShow进行取反操作。
    注意:
    1、onClick中的c要大写。
    2、onClick后跟的方法不要用引号包裹,而是用{}
    3、在ES6的class中React是不会自动绑定this的,所以需要自己通过bind绑定。
    4、changeState方法中,不能直接修改isShow的值,而是需要借助setState方法来进行设置。
  • 第二件事是要为id为myDiv的DIV增加一个style属性,该属性要根据isShow的状态来对DIV进行显示与隐藏
    注意:
    1、style的值不要用双引号,而是用{},否则会报错
    最终版代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #myDiv{
            width:200px;
            height:400px;
            background:red;
            color:yellow;
            border:1px solid green;
        }
    </style>
    <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react.development.js"></script>
    <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/react-dom.development.js"></script>
    <script src="https://zhangpeiyue.com/wp-content/uploads/2018/08/babel.min_.js"></script>
</head>
<body>
<div id="wrap"></div>
</body>
<script type="text/babel">
    class MyComponent extends React.Component{
        constructor(props){
            super(props);
            // 为当前状态添加isShow属性
            this.state={
                // 值为true显示,false为隐藏。默认值为true。
                isShow:true
            }
        }
        changeState(){
            //此处不能直接修改isShow的值。而是需要借助setState方法!
            this.setState({
                //取反操作
                isShow:!this.state.isShow
            });
        }
        render(){
            //返回组件的初始内容
            return <div>
                {/*在ES6的class中React是不会自动绑定this的,所以需要自己绑定*/}
                <input type="button" value="显示与隐藏" onClick={this.changeState.bind(this)} />
                <div id="myDiv" style={{display:this.state.isShow?'block':'none'}}>
                    我在这里呀!
                </div>
            </div>
        }
    }
    ReactDOM.render(
        <MyComponent/>,
        document.querySelector("#wrap")
    )
</script>
</html>

由上面的示例可以发现,当你改变isShow的状态时,div也会发生相对应的变化!
……
今天先到这!哈,未完,待续!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 作为一个合格的开发者,不要只满足于编写了可以运行的代码。而要了解代码背后的工作原理;不要只满足于自己的程序...
    六个周阅读 12,699评论 1 33
  • $ 前言   最近在考虑框架转型,鉴于作为一名JSer,要时时刻刻保持对新技术和流行技术的敏感性,而 React、...
    果汁凉茶丶阅读 22,144评论 5 32
  • 前端开发面试题 <a name='preface'>前言</a> 只看问题点这里 看全部问题和答案点这里 本文由我...
    自you是敏感词阅读 4,258评论 0 3
  • 2017年12月19日 星期二 晴 112篇 今天的孙一坤特别开心。因为他得到了有史以来的第一本荣誉证书...
    我是快乐的老爸阅读 1,274评论 0 0
  • 专业名词的中文可能不准确,参考英文名词。 本篇文章主要讲述我们在微服务架构设计中常见的事件驱动,内容如下: 1.E...
    拉斯哥阅读 4,821评论 0 8

友情链接更多精彩内容