1.react的基础知识
React 的基础之:JSX 语法
react 使用 JSX 语法,js 代码中可以写 HTML 代码。
let myTitle = <h1>Hello, World!</h1>;
JSX 语法解释:
(1) JSX 语法的最外层,只能有一个节点:
//错误
let myTitle = <p>Hello</p><p>World</p>
(2) JSX 语法中可以插入 JavaScript 代码,使用大括号。
let myTitle = <p>{'Hello' + 'World'}</p>
Babel 转码器
js 引擎(包括浏览器和 Node)都不认识 JSX,需要首先使用 Babel 转码,然后才能够运行。
<script src="react.js"></script>
<script src="react-dom.js"></script>
<script src="babel.min.js"></script>
<script type="text/babel">
// ** 这里添写代码! **
</script>
React 需要加载两个库:React 和 React-DOM,前者是 React 的核心库,后者是 React 的 DOM 适配库。
Babel 用来在浏览器转换JSX语法,如果服务器已经转好了,浏览器就不需要加载这个库。
React基础之React组件
React 允许用户定义自己的组件,插入网页。
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>菜鸟教程 React 实例</title>
<script src="https://cdn.bootcss.com/react/15.4.2/react.js"></script>
<script src="https://cdn.bootcss.com/react/15.4.2/react-dom.min.js"></script>
<script src="https://cdn.bootcss.com/babel-standalone/6.22.1/babel.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
class MyComponent extends React.Component {
render() {
return <h1>Hello world</h1>;
}
};
ReactDOM.render(
<MyComponent/>,
document.getElementById('example')
);
</script>
</body>
</html>
结果:
React组件的语法解释
- class MyComponent extends React.Component 是 ES 6语法,表示自定义一个 MyComponent 类,该类继承了积累 React.Component 的所有属性和方法。
- React 规定,自定义组件的开头字母必须大写,比如 MyComponent 不能写为 myComponent,以便于与内置的原生类相区分。
- 每个组件都必须有 render 方法,定义输出的样式。
- <MyComponent/> 表示生产一个组件类的实例,每一个实例一定要有闭合标签,写成 <MyComponent></MyComponent> 也可以。
组件的参数
组件可以从外部传入参数,内部使用this.props获取参数。
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>React 实例</title>
<script src="https://cdn.bootcss.com/react/15.4.2/react.js"></script>
<script src="https://cdn.bootcss.com/react/15.4.2/react-dom.min.js"></script>
<script src="https://cdn.bootcss.com/babel-standalone/6.22.1/babel.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
class MyComponent extends React.Component {
render() {
return <h1 style={{color: this.props.color}}>
{this.props.name}
</h1>;
}
};
ReactDOM.render(
<MyComponent name='Hello world' color='red' />,
document.getElementById('example')
);
</script>
</body>
</html>
结果:
语法解释
- 组件内部通过this.props对象获取参数。
组件的状态
组件往往会有内部状态,使用this.state表示
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>React 实例</title>
<script src="https://cdn.bootcss.com/react/15.4.2/react.js"></script>
<script src="https://cdn.bootcss.com/react/15.4.2/react-dom.min.js"></script>
<script src="https://cdn.bootcss.com/babel-standalone/6.22.1/babel.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
class MyComponent extends React.Component {
constructor(... args) {
super(...args);
this.state = {
test: 'Hello State',
isClicked: false
};
}
handleClick() {
let isClicked = !this.state.isClicked;
this.setState({
isClicked : isClicked,
text: isClicked ? 'Hello State' : Date();
});
}
render() {
return <h1 onClick={this.handleClick.bind(this)}>
clikc to : {this.state.text}
</h1>
}
};
ReactDOM.render(
<MyComponent/>,
document.getElementById('example')
);
</script>
</body>
</html>
语法解释
class MyTitle extends React.Component {
constructor(...args) {
super(...args);
this.state = {
name: '访问者'
}
}
}
constructor是组件的构造函数,会在创建实例时自动调用。...args表示组件参数,super(...args)是ES6规定的手法。this.state对象用来存放内部状态,这里是定义初始状态。
<div>
<input type="text" onChanges={this.handleChange.bind(this)}>
<p>你好,{this.state.name}</p>
</div>
this.state.name表示读取this.state的name属性。每当输入框有变动的时候,就会自动调用onChange指定的监听函数,这里是this.handleChange, .bind(this)表示该方法内部的this,绑定当前组件。
handleChange(e) {
let name = e.target.value;
this.setState({
name: name
});
}
this.setState方法用来重置this.state,每次调用这个方法,就会引发组件的重新渲染。
组件的生命周期
React为组件的不同生命周期,提供了近十个钩子方法。
钩子方法:是对于抽象方法或者接口的一个空实现。
现实中的一应用,想要实现某个接口中的一个方法(该接口中有多个方法),先用一个抽象类实现这个接口,然后用abstract修饰想要实现的方法,然后其他方法都使用空实现,然后子类继承抽象类即可。这里的空实现方法就是钩子方法。
- componentWillMount():组件加载前调用。
- componentDidMount():组件加载后调用。
- componentWillUpdate():组件更新前调用。
- componentDidUpadte():组件更新后调用。
- componentWillUnmont():组件卸载后调用。
- componentWillReceiveProps():组件接受新参数时调用。
- BFIThumb:WordPress 中替代TimThumb 进行裁图的选择
- jquery 操作ajax 相关方法
- SQL SERVER 2008 Hierarchyid数据类型
- Html5 学习利器 Web Standards Update for Microsoft Visual Studio 2010 SP1
- MongoDB 客户端 MongoVue
- HttpClient介绍
- 10个使用 Foundation 框架开发的WordPress 主题推荐
- jQuery 效果使用
- 几款更换WordPress 后台UI 的插件推荐
- 入门:构建简单的Web API
- WordPress 编辑器快捷键——让写作来得更方便些吧!
- ASP.NET Web API: 宿主(Hosting)
- 在 Windows Phone上使用QQConnect OAuth2
- WordPress 开发之使用WordPress 3.8+后台图标(dashicons)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CVE-2020-14644 weblogic iiop反序列化漏洞
- Ubuntu 17.10 安装折腾记录
- charles工具使用
- 干货 | 从0到1,搭建一个体系完善的前端React组件库
- LeetCode 01两数之和&02两数相加
- 给GitHub "彩蛋" readme 生成自定义统计信息
- Android |《看完不忘系列》之okhttp
- pt-osc改表过程中的中文乱码问题
- Hive Query生命周期 —— 钩子(Hook)函数篇
- python快速排序
- 扩展 Microsoft.Owin.Security
- Angular 2 版本的 ng-bootstrap 初体验
- 揭开MySQL“锁”的神秘面纱
- 从0到1开发测试平台(九)后端对接口response的封装
- 在 Mac OS X 上安装和配置 Wine