官网链接React

用于构建用户界面的 JavaScript 库

特色

  • 声明式:

    • React 使创建交互式 UI 变得轻而易举。为你应用的每一个状态设计简洁的视图,当数据改变时 React 能有效地更新并正确地渲染组件。
    • 以声明式编写 UI,可以让你的代码更加可靠,且方便调试。
  • 组件化

    • 创建拥有各自状态的组件,再由这些组件构成更加复杂的 UI。
    • 组件逻辑使用 JavaScript 编写而非模版,因此你可以轻松地在应用中传递数据,并使得状态与 DOM 分离。
  • 一次学习,随处编写

    • 无论你现在正在使用什么技术栈,你都可以随时引入 React 来开发新特性,而不需要重写现有代码。
    • React 还可以使用 Node 进行服务器渲染,或使用 React Native 开发原生移动应用。

应用:

  • 简单组件

    • React 组件使用一个名为 render() 的方法,接收输入的数据并返回需要展示的内容。在示例中这种类似 XML 的写法被称为 JSX。被传入的数据可在组件中通过 this.props 在 render() 访问。
    • 使用 React 的时候也可以不使用 JSX 语法。尝试使用 Babel REPL,了解 JSX 被编译成原生 JavaScript 代码的步骤。
    • class HelloMessage extends React.Component {
      render() {
      return (
      <div>
      Hello {this.props.name}
      </div>
      );
      }
      } ReactDOM.render(
      <HelloMessage name="Taylor" />,
      document.getElementById('hello-example')
      );
  • 有状态组件

    • 除了使用外部数据(通过 this.props 访问)以外,组件还可以维护其内部的状态数据(通过 this.state 访问)。当组件的状态数据改变时,组件会再次调用 render() 方法重新渲染对应的标记。
    • class Timer extends React.Component {
      constructor(props) {
      super(props);
      this.state = { seconds: 0 };
      } tick() {
      this.setState(state => ({
      seconds: state.seconds + 1
      }));
      } componentDidMount() {
      this.interval = setInterval(() => this.tick(), 1000);
      } componentWillUnmount() {
      clearInterval(this.interval);
      } render() {
      return (
      <div>
      Seconds: {this.state.seconds}
      </div>
      );
      }
      } ReactDOM.render(
      <Timer />,
      document.getElementById('timer-example')
      );
  • 应用

    • 使用 props 和 state,我们可以创建一个简易的 Todo 应用。在示例中,我们使用 state 来保存现有的待办事项列表及用户的输入。尽管事件处理器看似被内联地渲染,但它们其实只会被事件委托进行收集和调用。
    • class TodoApp extends React.Component {
      constructor(props) {
      super(props);
      this.state = { items: [], text: '' };
      this.handleChange = this.handleChange.bind(this);
      this.handleSubmit = this.handleSubmit.bind(this);
      } render() {
      return (
      <div>
      <h3>TODO</h3>
      <TodoList items={this.state.items} />
      <form onSubmit={this.handleSubmit}>
      <label htmlFor="new-todo">
      What needs to be done?
      </label>
      <input
      id="new-todo"
      onChange={this.handleChange}
      value={this.state.text}
      />
      <button>
      Add #{this.state.items.length + 1}
      </button>
      </form>
      </div>
      );
      } handleChange(e) {
      this.setState({ text: e.target.value });
      } handleSubmit(e) {
      e.preventDefault();
      if (!this.state.text.length) {
      return;
      }
      const newItem = {
      text: this.state.text,
      id: Date.now()
      };
      this.setState(state => ({
      items: state.items.concat(newItem),
      text: ''
      }));
      }
      } class TodoList extends React.Component {
      render() {
      return (
      <ul>
      {this.props.items.map(item => (
      <li key={item.id}>{item.text}</li>
      ))}
      </ul>
      );
      }
      } ReactDOM.render(
      <TodoApp />,
      document.getElementById('todos-example')
      );
  • 在组件中使用外部插件

    • React 允许你结合其他框架或库一起使用。示例中使用了一个名为 remarkable 的外部 Markdown 库。它可以实时转换 <textarea> 里的内容。
    • class MarkdownEditor extends React.Component {
      constructor(props) {
      super(props);
      this.handleChange = this.handleChange.bind(this);
      this.state = { value: 'Hello, **world**!' };
      } handleChange(e) {
      this.setState({ value: e.target.value });
      } getRawMarkup() {
      const md = new Remarkable();
      return { __html: md.render(this.state.value) };
      } render() {
      return (
      <div className="MarkdownEditor">
      <h3>Input</h3>
      <label htmlFor="markdown-content">
      Enter some markdown
      </label>
      <textarea
      id="markdown-content"
      onChange={this.handleChange}
      defaultValue={this.state.value}
      />
      <h3>Output</h3>
      <div
      className="content"
      dangerouslySetInnerHTML={this.getRawMarkup()}
      />
      </div>
      );
      }
      } ReactDOM.render(
      <MarkdownEditor />,
      document.getElementById('markdown-example')
      );

React之简介的更多相关文章

  1. React Native 简介:用 JavaScript 搭建 iOS 应用(2)

    [编者按]本篇文章的作者是 Joyce Echessa--渥合数位服务创办人,毕业于台湾大学,近年来专注于协助客户进行 App 软体以及网站开发.本篇文章中,作者介绍通过 React Native 框 ...

  2. React Native 简介:用 JavaScript 搭建 iOS 应用 (1)

    [编者按]本篇文章的作者是 Joyce Echessa--渥合数位服务创办人,毕业于台湾大学,近年来专注于协助客户进行 App 软体以及网站开发.本篇文章中,作者介绍通过 React Native 框 ...

  3. 《React Native 精解与实战》书籍连载「React 与 React Native 简介」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  4. 1. react 基础 简介 及 环境搭建

    一.简介 由 Facebook 推出 2013 年 开源 的 函数式编程的 使用人数最多的 前端框架 拥有健全的文档与完善的社区 ( 官网 ) react 16 称为 React Fiber ( 底层 ...

  5. React框架简介

    React的基本认识 Facebook开源的一个js库,一个用来动态构建用户界面的js库 英文官网,中文官网 React的特点 Declarative(声明式编码),Component-Based(组 ...

  6. React.js 简介

    React.js 是一个帮助你构建页面 UI 的库.如果你熟悉 MVC 概念的话,那么 React 的组件就相当于 MVC 里面的 View.如果你不熟悉也没关系,你可以简单地理解为,React.js ...

  7. React.js 小书介绍

    React.js 小书 Github 关于作者 这是一本关于 React.js 的小书. 因为工作中一直在使用 React.js,也一直以来想总结一下自己关于 React.js 的一些知识.经验.于是 ...

  8. 一次掌握 React 与 React Native 两个框架

    此系列文章将整合我的 React 视频教程与 React Native 书籍中的精华部分,给大家介绍 React 与 React Native 结合学习的方法. 1. 软件开发语言与框架的学习本质 我 ...

  9. React.js 入门与实战之开发适配PC端及移动端新闻头条平台课程上线了

    原文发表于我的技术博客 我在慕课网的「React.js 入门与实战之开发适配PC端及移动端新闻头条平台」课程已经上线了,文章中是目前整个课程的大纲,以后此课程还会保持持续更新,此大纲文档也会保持更新, ...

随机推荐

  1. MySQL进阶11--DDL数据库定义语言--库创建/修改/删除--表的创建/修改/删除/复制

    /*进阶 11 DDL 数据库定义语言 库和表的管理 一:库的管理:创建/修改/删除 二:表的管理:创建/修改/删除 创建: CREATE DATABASE [IF NOT EXISTS] 库名; 修 ...

  2. python开发全自动网站链接主动提交百度工具

    自己网站因数据比较多,趁晚上没事就写了一个通过python爬取url自动提交给百度,实现网站全站提交的思路,代码实现很简单,因为编写时间仓储,难免有些bug,可以放在服务器上配置下定时爬取提交. im ...

  3. python 'NoneType' object has no attribute 'get'

    获取 页面链接的时候报错 'NoneType' object has no attribute 'get' href = div.find("a").get("href& ...

  4. 1~n中数字0~9出现的次数

    题意:rt 分析: 当然不可能去遍历,应该寻找统计的方法. 如计算 78501 中 "5" 出现的次数. 我们可以枚举“5”出现的位置, 如当“5”位于倒数第2位时,写成 xxx5 ...

  5. [hdoj5927][dfs]

    http://acm.hdu.edu.cn/showproblem.php?pid=5927 Auxiliary Set Time Limit: 9000/4500 MS (Java/Others)  ...

  6. Codeforces Round #597 (Div. 2) A. Good ol' Numbers Coloring

    链接: https://codeforces.com/contest/1245/problem/A 题意: Consider the set of all nonnegative integers: ...

  7. IntelliJ IDEA——数据库集成工具(Database)的使用

    https://www.cnblogs.com/huiyi0521/p/10125537.html idea集成了一个数据库管理工具,可以可视化管理很多种类的数据库,意外的十分方便又好用.这里以ora ...

  8. 004_Python3 注释

    确保对模块, 函数, 方法和行内注释使用正确的风格 Python中的注释有单行注释和多行注释:Python中单行注释以 # 开头,例如::# 这是一个注释print("Hello, Worl ...

  9. faebdc的烦恼 莫队

    faebdc的烦恼 莫队 题面 思路 有点难想的莫队. 首先我们肯定要一个cnt[i]记录难度i出现的次数,但是我们发现每次删去一个难度后,如果那个难度的个数恰好是当前最多次数,我们就可能要更新一下答 ...

  10. luogu P2345 奶牛集会

    二次联通门 : luogu P2345 奶牛集会 /* luogu P2345 奶牛集会 权值线段树 以坐标为下标, 坐标为值建立线段树 对奶牛按听力由小到大排序 对于要查的牛 每次第i次放入奶牛起作 ...