每一个组件都有状态,比如一个开关,开 和 关,都是一种state.那么react是怎么管理它的state的?

React 把用户界面当做状态机,可以轻松的让用户界面和数据保持一致。用户只需要更新组件的state就可以重新渲染用户界面,不用操作DOM。

state:

  1.可以通过getInitialState方法初始化state

    getInitialState:function(){

      return {

        open :true

      }

    }

  2.通过setState("open",false)去改变state状态,然后重新渲染页面。那有人会说,为啥一定要用setState,不能通过this.state.open = false去改变状态吗?这两种有啥区别呢?

  使用setState去改变状态时,React会主动去渲染VDOM结构,但是使用this.state.open去设置,不会主动去渲染VDOM,需要手动去调用forceUpdate()去强制更新。

state应该保存什么?

state不要保存props的计算值,也不要保存render(0不使用的状态。

eg:

class Component extends React.Component{
        constructor(props){
          super(props);
          this.state = {message:props.message}
        },
        render:function(){
          return (<div>{this.state.message}</div>);
        }
      }

  在这个例子中,state只在第一次创建组件的时候才被赋值,当props变化后,state值不会变,因此界面不会更新。因此不得不在componentWillReceiveProps()中更新state,,导致真实的数据源重复

正确实现:

class Component extends React.Component{
        constructor(props){
          super(props);
        },
        render:function(){
          return (<div>{this.props.message}</div>);
        }
      }

  //不要在state中存储props的计算值

eg:

 class Component extends React.Component{
        constructor(props){
          super(props);
          this.state = {
            fullname:'${props.name}${props.lastName}'
          };
        },
        render:function(){
          return (<div>{this.state.fullname}</div>);
        }
      }

  更好的实现:

class Component extends React.Component{
        constructor(props){
          super(props);
        },
        render:function(){
        const {name,funllname}=this.props;
          return (<div>{'${name}${fullname}'}</div>);
        }
      }

  目前还没有学习redux,对state的理解还不够深入,先写点吧。。。。后续更新

React学习笔记-03 state的更多相关文章

  1. React学习笔记(五)State&声明周期

    React学习笔记(五) 四.State&声明周期 可以为组件添加"状态(state)".状态与属性相似,但是状态是私有的,完全受控于当前组件. 局部状态就是只能用于类(定 ...

  2. react学习笔记1--基础知识

    什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...

  3. React学习笔记(一)- 入门笔记

    React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...

  4. React学习笔记(七)条件渲染

    React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...

  5. React学习笔记(六)事件处理

    React学习笔记(六) 五.事件处理 React事件绑定属性的命名采用驼峰写法,不同于传统DOM全部小写. 如果采用JSX的语法,事件函数需要用大括号{}包裹函数名,不同于传统DOM字符串小括号的方 ...

  6. React学习笔记 - JSX简介

    React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...

  7. React学习笔记 - Hello World

    React Learn Note 1 React学习笔记(一) 标签(空格分隔): React JavaScript 前.Hello World 1. 创建单页面应用 使用Create React A ...

  8. 【React】react学习笔记02-面向组件编程

    react学习笔记02-面向组件编程 面向组件编程,直白来说,就是定义组件,使用组件. 以下内容则简单介绍下组建的声明与使用,直接复制demo观测结果即可. 步骤: 1.定义组件   a.轻量组件-函 ...

  9. React学习笔记--程序调试

    React学习笔记 二 程序调试   前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...

随机推荐

  1. replace()随笔

    今天在读jquery源码时,发现一个以前自己不曾注意过得问题,就是replece()的第二个参数为函数时的问题,以前只是知道replace()的第二个参数可以为函数,但是不知道该怎么操作,今天看到源码 ...

  2. C#多线程,线程锁

    ];             ; i < ; i++) {                 threads[i]= ; i < ; i++) {                     R ...

  3. React的生命周期

    我们先来看一张图,其实看完这张图基本就懂了,如果还不懂,请继续往下看. getDefaultProps 执行过一次后,被创建的类会有缓存,映射的值会存在this.props,前提是这个prop不是父组 ...

  4. 简单的通讯录(C语言实现)

    通讯录实现的功能 --: .添加联系人 .删除联系人 .查找联系人 .修改联系人 .显示联系人 .清空通讯录 .按照姓名进行排序 .退出程序 该通讯录将联系人的信息保存在文件中 在VS2013中打开文 ...

  5. jQuery 之玩转 checkbox

    <!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...

  6. awk-模式匹配

    使用awk作为文本处理工具,正则表达式是少不了的. 要掌握这个工具的正则表达式使用.其实,我们不必单独去学习它的正则表达式.正则表达式就像一门程序语言,有自己语法规则已经表示意思. 对于不同工具,其实 ...

  7. Nuget 学习一

    初识Nuget 对应C#开发的人员来说, DLL和相关的引用 并不陌生吧,通过手动拷贝DLL 存在很多问题, 比如SOA的实体DLL,开发者和使用者的DLL不一致,就可能存在字段的不一致, 通过Nug ...

  8. Ubuntu 14.04—Anaconda 相关

    Anaconda 使用国内镜像: https://keyunluo.github.io/2016/07/17/2016-07-17-anaconda-python.html Anaconda下的 De ...

  9. 诡异的数学,数字问题 - leetcode

    134. Gas Station 那么这题包含两个问题: 1. 能否在环上绕一圈? 2. 如果能,这个起点在哪里? 第一个问题,很简单,我对diff数组做个加和就好了,leftGas = ∑diff[ ...

  10. C#数组与集合