美文网首页
React简单分析

React简单分析

作者: 小小的开发人员 | 来源:发表于2019-05-30 11:24 被阅读0次

      传统的前端开发思路是用分离式的HTML/CSS、非侵入式JS、模板语言、MVC、CSS文件、Bootstrap等。React让组件化成为了前端开发的基本思路,比传统思路可以更好的控制前端复杂度,组件把数据翻译成UI,数据通过组件props属性传入,组件自身状态通过state状态值来控制, 每个组件都是一个状态机,也就是声明式编程,数据有变化,组件自动刷新。

    JSX

      JSX是JavaScript的语法扩展(extension),在JavaScript中可以编写像HTML一样的代码,JSX中的表达式要包含在大括号里。

    Vue与React

      Vue的基本思路是基于HTML模板的扩展,而React的基本思路是基于JS语言的扩展。由于Vue的写法更接近于传统,所以对于习惯了HTML的开发者更容易接受;而React中的JSX语法需要一定的学习成本。但一旦掌握了,再基于强大的社区力量,就可以使用JS语言来表达一切,使用起来非常流畅。

    【模板字符串】
      可以在JSX中使用模板字符串

    {`Joined in ${time}`}
    

    【属性】
      可以使用引号来定义以字符串为值的属性:

    const element = <div tabIndex="0"></div>;
    

    也可以使用大括号来定义以 JavaScript 表达式为值的属性:

    const element = <img src={user.avatarUrl} />;
    

    下面这两个 JSX 表达式是等价的:

    <MyComponent message="hello world" />
    <MyComponent message={'hello world'} />
    

    【默认为true】
      如果没有给属性传值,它默认为 true

    <MyTextBox autocomplete />
    <MyTextBox autocomplete={true} />
    

    【扩展属性】
      如果已经有了个 props 对象,并且想在 JSX 中传递它,可以使用 ... 作为扩展操作符来传递整个属性对象。下面两个组件是等效的:

    function App1() {
      return <Greeting firstName="Ben" lastName="Hector" />;
    }
    
    function App2() {
      const props = {firstName: 'Ben', lastName: 'Hector'};
      return <Greeting {...props} />;
    }
    

    【return】
      return一定要紧挨着左括号,否则不生效

    【JSX是进步还是倒退】
      长期以来,一直不倡导在HTML中使用onclick,为什么在JSX中却要使用onClick这样的方式来添加事件处理函数呢?
      在React出现之初,很多人对React这样的设计非常反感,因为React把类似HTML的标记语言和Javascript混在一起了。但是,随着时间的推移,业界逐渐认可了这种方式,因为大家发现,以前用HTML来代表内容,用CSS代表样式,用JavaScript来定义交互行为,这三种语言分在三种不同的文件里面,实际上是把不同技术分开管理了,而不是逻辑上的“分而治之”。
      根据做同一件事的代码应该有高耦合性的设计原则,为什么不把实现这个功能的所有代码集中在一个文件里呢?
      在JSX中使用onClick来添加事件处理函数,是否代表网页应用开发兜了一个大圈,最终回到了起点呢?
      不是的,在HTML中直接使用onclick很不专业,因为onclick添加的事件处理函数是在全局环境下执行的,这污染了全局环境,很容易产生意料不到的后果;给很多DOM元素添加onclick事件,可能会影响网页的性能;对于使用onclick的DOM元素,如果在DOM元素删除后忘了注销事件处理函数,可能会造成内存泄漏。
      上面说的这些问题在JSX中都不存在:
      onClick挂载的每个函数,都可以控制在组件范围内,不会污染全局空间;在JSX中使用了onClick,但并没有产生直接使用onclick的HTML,而是使用事件委托的方式处理,无论多少个onclick出现,最后都只在DOM树上添加了一个事件处理函数,挂在最顶层的DOM节点上;因为React控制了组件的生命周期,在unmount时自然能够清除相关的所有事件处理函数,内存泄漏也不再是一个问题。

    相关文章

      网友评论

          本文标题:React简单分析

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