React学习分享(一)

2018-01-22  本文已影响0人  颜之有雾

写这篇文章的主要目的是为了加强自己的记忆,也给别的同事一个快速入门的教程。

如果你觉得下载React环境比较麻烦,那么你可以直接打开CodePen,在这个页面直接进行demo的练习可以很直观的看到效果。

简单示例

介绍什么的就不说了,百度一搜一大堆,我们直接进入正题。
先来一个最简单的演示:

ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('root')
);

这段代码就会在页面上打出“Hello,world!”,自己可以在上文介绍的链接中试一试。

JSX

这里先介绍一下jsx,看名字很唬人,其实就是html和js的结合显示,其实看起来有点像模板语言,例如freemarker、thymeleaf等,具体怎么编译和解析它,我们不用去关心,有专门的解析器(babel ...)去做这个事。

 const element = <h1>Hello, world!</h1>;

 function formatName(user) {
   return user.firstName + ' ' + user.lastName;
 }

 const user = {
     firstName: 'Harper',
     lastName: 'Perez'
 };

const element = (
  <h1>
    Hello, {formatName(user)}!
  </h1>
);

ReactDOM.render(
  element,
  document.getElementById('root')
);

上面的“element”都符合jsx,并且jsx也可以给属性赋值:

const element = <div tabIndex="0"></div>;
const element = <img src={user.avatarUrl}></img>;

使用双引号或者大括号均可赋值,但是不能一起使用。
并且在被赋值的属性一定是遵循驼峰命名法的例如上例中的“tabIndex”在html中是“tabindex”。

如果标签中没有内容形如<……><……/>可以直接写为</>,例如:

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

JSX也支持标签拥有子类,例如:

const element = (
  <div>
    <h1>Hello!</h1>
    <h2>Good to see you here.</h2>
  </div>
);

并且,JSX能够有效的防止注入攻击,默认情况下,在呈现之前,DOM会转义嵌入在JSX中的任何值。因此,它可以确保永远不会注入在应用程序中没有显式编写的任何内容。在呈现之前,所有的内容都转换为字符串。

在React中我们会大量的使用JSX和ES6语法,希望正在读这篇文章的各位有这个基础,关于ES6的学习,这里介绍ES6标准入门(第三版 阮一峰 著)
当然,希望大家能去买正版的书,毕竟是人家的劳动成果。

元素

元素(element)是React应用中最小的构建块。和浏览器DOM的element相比,React的element就是一个简单的对象,创建的代价相当低,由React DOM负责将React elements匹配到对应的DOM节点。

注意:不要将元素(element)和组件(component)的概念混淆。

将元素渲染到DOM

首先,得创建一个接收节点:

<div id="root"></div>

在设计这个地方要显示什么内容的时候,要先考虑最终以什么样的方式呈现内容,因为一般只有一个root节点。
通过调用 ReactDOM.render() 将React element渲染到root DOM 节点:

const element = <h1>Hello, world</h1>;
ReactDOM.render(
  element,
  document.getElementById('root')
);

你可以在CodePen中尝试一下。

更新元素

React element 一旦创建就是不可变的,你不能改变他的属性或是其他任何东西。如果你想要动态的改变页面的显示,那么最适合的方式就是重新创建一个element(如果名字相同,只会更新要修改的那一句,相当高效)并调用ReactDOM.render(),举个栗子 ^ _ ^:

function tick() {
  const element = (
    <div>
      <h1>Hello, world!</h1>
      <h2>
        It is{' '}
        {new Date().toLocaleTimeString()}.
      </h2>
    </div>
  );
  ReactDOM.render(
    element,
    document.getElementById('root')
  );
}

setInterval(tick, 1000);
//你可以用浏览器调试工具监控这段代码的刷新情况,会有更深的印象。

好的,先写这么多。如果对你的学习有用,请关注我~~

上一篇下一篇

猜你喜欢

热点阅读