2017.11.30 React基础语法之一组件

1.推荐一个React学习中文网站:http://www.css88.com/react/

2.使用jsx来将代码封装成React组件,然后像插入普通 HTML 标签一样,在其他地方插入这个组件。使用React.createClass用于生成一个组件

var MyComponent=React.createClass({
  render: function() {
   return <h1>Hello world!</h1>;
 }
});
ReactDOM.render(
 <MyComponent />,
 document.getElementById(‘example‘)
);

上面代码中,变量 MyComponent就是一个组件类。模板插入 <MyComponent /> 时,会自动生成 MyComponent 的一个实例(下文的"组件"都指组件类的实例)。所有组件类都必须有自己的 render 方法,用于输出组件。

3.React 可以渲染 HTML 标签 (strings) 或 React 组件 (classes)。

注意:在react中通常约定组件类的第一个字母必须大写,html标签都是小写

//要渲染 HTML 标签,只需在 JSX 里使用小写字母开头的标签名。
var myDivElement = <div className="foo" />;
React.render(myDivElement, document.getElementById(‘example‘));

//要渲染 React 组件,只需创建一个大写字母开头的本地变量。
var MyComponent = React.createClass({/*...*/});
var myElement = <MyComponent  />;
React.render(myElement, document.getElementById(‘example‘));

4.重点之一:复合组件

var WebSite = React.createClass({
  render: function() {
    return (
      <div>
        <Name name={this.props.name} />
        <Link site={this.props.site} />
      </div>
    );
  }
});

var Name = React.createClass({
  render: function() {
    return (
      <h1>{this.props.name}</h1>
    );
  }
});

var Link = React.createClass({
  render: function() {
    return (
      <a href={this.props.site}>
        {this.props.site}
      </a>
    );
  }
});

ReactDOM.render(
  <WebSite name="菜鸟教程" site=" http://www.runoob.com" />,
  document.getElementById(‘example‘)
);

5.重点之二:动态组件

var MyComponent=React.createClass({
  getInitialState: function() {
       return {clickNum: 0};
  },
  handleClick:function(){                       //组件的事件动作
    var num=this.state.clickNum;               //组件的状态
    num++;
    this.setState({clickNum:num});
  },
  render: function() {
   return (
      <div>
        <h1 onClick={this.handleClick}>Hello {this.props.name}!</h1>       //组件的属性
        <h2 style={{color:‘red‘}}>点击{this.props.name}次数:{this.state.clickNum}</h2>
      </div>
    );
 }
});
ReactDOM.render(
  <div>
     <MyComponent name="张三" />
     <hr/>
     <MyComponent name="李四" />
  </div>,
 document.getElementById(‘example‘)
);

上面代码中定义的MyComponent组件包含属性,状态和事件,是一个简单的比较完整的组件。使用props通过父组件进行传递值,使用state定义组件自己的状态,组件支持的大部分的DOM操作事件。

6.关于状态state:

React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面(不要操作 DOM)。

  • 组件免不了要与用户互动,React 将组件看成是一个状态机,一开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新渲染 UI。
  • getInitialState 方法用于定义初始状态,也就是一个对象,这个对象可以通过 this.state 属性读取。当用户点击组件,导致状态变化,this.setState 方法就修改状态值,每次修改以后,自动调用 this.render 方法,再次渲染组件。
  • 由于 this.props 和 this.state 都用于描述组件的特性,可能会产生混淆。
  • 一个简单的区分方法是,this.props 表示那些一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变化的特性。
  • 例如:

7.关于Props:

(1)state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变。这就是为什么有些容器组件需要定义 state 来更新和修改数据。 而子组件只能通过 props 来传递数据

var HelloMessage = React.createClass({
  render: function() {
    return <h1>Hello {this.props.name}</h1>;
  }
});

ReactDOM.render(
  <HelloMessage name="Runoob" />,
  document.getElementById(‘example‘)

(2)Props验证:

Props 验证使用 propTypes,它可以保证我们的应用组件被正确使用,React.PropTypes 提供很多验证器 (validator) 来验证传入数据是否有效。当向 props 传入无效数据时,JavaScript 控制台会抛出警告。

以下实例创建一个 Mytitle 组件,属性 title 是必须的且是字符串,非字符串类型会自动转换为字符串 :

var title = "菜鸟教程";
// var title = 123;
var MyTitle = React.createClass({
  propTypes: {
    title: React.PropTypes.string.isRequired,
  },

  render: function() {
     return <h1> {this.props.title} </h1>;
   }
});
ReactDOM.render(
    <MyTitle title={title} />,
    document.getElementById(‘example‘)
);

  

8.获取真实的DOM:

组件并不是真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM (virtual DOM)。只有当它插入文档以后,才会变成真实的 DOM 。
有时需要从组件获取真实 DOM 的节点,这时就要用到 ref 属性。

var MyComponent = React.createClass({
   handleClick: function() {
     this.refs.myTextInput.focus();
   },
   render: function() {
     return (
     <div>
       <input type="text" ref="myTextInput" />
       <input type="button" value="Focus the text input" onClick={this.handleClick} />
     </div>
     );
   }
});

为了获取真是DOM节点,html元素必须有一个 ref 属性,然后 this.refs.[refName] 就会返回这个真实的 DOM 节点。需要注意的是,由于 this.refs.[refName] 属性获取的是真实 DOM ,所以必须等到虚拟 DOM 插入文档以后,才能使用这个属性,否则会报错

				
时间: 2024-10-08 22:46:41

2017.11.30 React基础语法之一组件的相关文章

我们一起来详细的了解react的语法以及组件的使用方法

jsx的介绍 React 使用 JSX 来替代常规的 JavaScript. JSX 是一个看起来很像 XML 的 JavaScript 语法扩展. jsx的优点 JSX 执行更快,因为它在编译为 JavaScript 代码后进行了优化. 它是类型安全的,在编译过程中就能发现错误. 使用 JSX 编写模板更加简单快速. JSX的使用方法 独立文件 内联样式 注释 JSX的语法 JavaScript 表达式的使用 三元运算的使用 数组化标签 关于组件 函数定义了一个组件: 函数定义名字使用驼峰方法

2017.11.6 - ant design table等组件的使用,以及 chrome 中 network 的使用

一.今日主要任务 悉尼小程序后台管理开发: 景点管理页面: 获取已有数据列表,选取部分数据呈现在表格中,根据景点名称.分类过滤出对应的景点. 二.难点 1. 项目技术选取: ant design.react.es6: 2. 在此之前,只看过一点点 es6 的语法,未实操:react 也只是看过语法,未实操:ant design 是个什么鬼,第一次听说. 3. 所遇的主要问题: (1)ant design 中 table 组件的使用: 引入 Table.Buttton.Col.Row.Select

2017.11.30 Reat前后端数据交互之Button提交数据处理(ajax方法单独封装成API,不用Form)

1.按钮定义: 2.引入外部js文件(封装了ajax方法的文件):注意目录结构 3.调用ajax文件中的具体方法: 4.关于ajax文件中方法的编写语法: 写法一: 写法二: 写法二对应的调用该方法的写法: ##var mongoose = module.exports = exports = new Mongoose; 5.ES6中export.import与export default区别: export与export default均可用于导出常量.函数.文件.模块等,你可以在其它文件或模

2017.12.07 React路由到不同组件界面

前提: 引入的react-router组件必须是2.*.*的版本,不然其他版本不是这样的写法   1.index首页路由到不同组件界面: import React,{Component} from 'react'; import ReactDOM from 'react-dom'; import { Router,hashHistory,Route } from 'react-router'; import Apply from './apply'; import Examines from '

react 基础语法复习1- 搭建开发环境

之前有看过阮一峰老师的react教程跟着做了一遍,学习了一下.好久没看,有点忘记了,这次跟着脚手架工具系统的复习一遍.顺便学习学习 react-router 和 redux 首先,脚手架工具我使用的是create-react-app ,这个是官方出的,感觉比较靠谱.不过真实使用起来感觉比vue-cli复杂,webpack配置文件都在node_modules文件夹里面,找了好久,并且开发环境和生产环境有分开配置了. 全局安装 脚手架工具 cnpm i -g create-react-app //

2017.8.1 logstash基础语法学习

数据类型 1 bool:debug => true 2 string:host => "hostname" 3 int:port => 514 4 array:match => ["datetime", "UNIX", "ISO8601"] 5 hash:options => { 6 key1 => "value1", 7 key2 => "value2&

2017.11.30

递推数列 题目描述 给定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q.这里n >= 2. 求第k个数对10000的模. 输入描述: 输入包括5个整数:a0.a1.p.q.k. 输出描述: 第k个数a(k)对10000的模. 示例1 输入 20 1 1 14 5 输出 8359 #include <iostream> #include <cstdio> #include <iomanip> #include <string> #

React(一):React基础

本文主要是简单说明react基础语法概念和知识,从零开始系列的先绕行官网 组件: JSX语法:在JS里直接编写HTML    return( <div>Hello</div> )  也可以自定义标签,自定义组件首字母需大写 return <MyTag>Hello</MyTag> state:组件的状态,就是数据,更新state,界面可以重新渲染,不需要操作DOM,setState是异步函数 props:state 和 props 主要的区别在于 props 

30个Python常用基础语法分享,希望对你们有帮助!

![**o/upload_images/11897912-4788c44c5646f3e5?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)写在前面 1.冒泡排序 2.计算x的n次方的方法 3.计算aa + bb + c*c + -- 4.计算阶乘 n! 5.列出当前目录下的所有文件和目录名 6.把一个list中所有的字符串变成小写: 7.输出某个路径下的所有文件和文件夹的路径 8.输出某个路径及其子目录下的所有文件路径 9.输出某个路径及其