@1)jquery与react
1.1 jquery:我们把它称作命令式编程(70%都是在对dom进行操作),它是直接操作dom
1.2 react:声明式开发,它是面向数据编程,这里你需要自己编写react才会对面向数据编程有很好的理解(我们在react中并不是我们直接操作dom,也就是只有两种途径即改变state和props的数据才会去渲染页面),这里有个很好的比喻我们需要盖一栋大楼,对于react来说,我们只需要绘制图纸标注数据,而至于盖楼的操作是由react来操作的
1.3 react 与其它的框架是可以共存的比如jquery,react的入口文件只是操作id="root"的div,所有的组件挂载都在这个盒子里,而我们只需要在index.html中在新增div便可以使用jquery,只是不要再id="root"盒子中使用就好了,如图
@2)组件化思想:react将页面的功能展示部分抽象成一个个组件,我们使用的div标签在react中被称为元素,而大写字母开头的通常被定义为组件,所以为避免混合,我们自己定义的组件需要首字母大写
@3)单项数据流:因为是组件化的思想,所以这里也就会涉及到数据传递的问题
如上图进行了一个简单的数据传递的描述,即将父组件中state传给子组件,在组件中会有一个props的属性,而父组件正是依靠这个属性向自己的孩子传递state消息的,也就是我们在组件中常看到的 const { data } = this.props 这句代码,那么孩子如何向父组件通信呢,这里其实也用的是props这个属性,我们既然可以把数据通过props传递,那我们一样可以将改变父组件state的函数传递给子组件,只需要在子组件中调用这个函数就完成了父组件state数据的改变,这也是单向数据流的意思,即数据都是从父组件的state流向子组件的,那么会有人问为什么会有这个思想,为什么不直接在子组件通过props拿到state后 直接改变父组件的state,举个例子,还是如图在父亲下面有两个儿子,这两个儿子都用到了同一个state.data,当有一个儿子改变了这个state.data的时候,我想知道这个state.data数据是在什么时候改变的,那么我将很难调试,因为我并不知道每个子组件会把它改成什么样子,而我把改变state.data的函数统一写在父组件中,当子组件调用这个函数时,我们将很容易看到数据如何变化,然后父组件通知孩子我的数据变了,你要通过props属性更新一下
@4)react是一个视图层框架:这句话和上面的单向数据流解释有关,正如图里提出的问题,最下面的孙子要如何和另一个孙子通信呢,按单向数据流来看就是孙子调用儿子里的函数,儿子调用父亲里改变state.data的函数,然后state.data数据改变,父亲再通过props一层一层向下一直传递下去,当应用非常大,组件嵌套的很深,那么数据将非常的不容易维护,所以就会有 redux数据流等框架与之结合