Bootstrap

前端开发中需要掌握的开发框架React

React 简介

React 基本使用

JSX 的基本使用

React 使用 JSX 来替代常规的 JavaScript。

JSX 是一个看起来很像 XML 的 JavaScript 语法扩展。

我们不需要一定使用 JSX,但它有以下优点:

JSX 执行更快,因为它在编译为 JavaScript 代码后进行了优化。它是类型安全的,在编译过程中就能发现错误。使用 JSX 编写模板更加简单快速。例如:

var myDivElement =

;

ReactDOM.render(myDivElement, document.getElementById('example'));

React 三大组件(state,props,refs)

State 组件

React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。

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

以下实例创建一个名称扩展为 React.Component 的 ES6 类,在 render() 方法中使用 this.state 来修改当前的时间。

添加一个类构造函数来初始化状态 this.state,类组件应始终使用 props 调用基础构造函数。

class Clock extends React.Component {

constructor(props) {

super(props);

this.state = {date: new Date()};

}

render() {

return (

Hello, world!

现在是 {this.state.date.toLocaleTimeString()}.

);

}

}

ReactDOM.render(

,

document.getElementById('example')

);

将生命周期方法添加到类中

class Clock extends React.Component {

constructor(props) {

super(props);

this.state = {date: new Date()};

}

componentDidMount() {

this.timerID = setInterval(

() => this.tick(),

1000

);

}

componentWillUnmount() {

clearInterval(this.timerID);

}

tick() {

this.setState({

date: new Date()

});

}

render() {

return (

Hello, world!

现在是 {this.state.date.toLocaleTimeString()}.

);

}

}

ReactDOM.render(

,

document.getElementById('example')

);

props 组件

React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。

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

function HelloMessage(props) {

return

Hello {props.name}!

;

}

const element = ;

ReactDOM.render(

element,

document.getElementById('example')

);

事件的处理

class Toggle extends React.Component {constructor(props) {super(props);this.state = {isToggleOn: true};

// 这边绑定是必要的,这样 `this` 才能在回调函数中使用
this.handleClick = this.handleClick.bind(this);

}

handleClick() {this.setState(prevState => ({isToggleOn: !prevState.isToggleOn}));}

render() {return ();}}

ReactDOM.render(,document.getElementById('example'));

条件的修改

function Greeting(props) {

const isLoggedIn = props.isLoggedIn;

if (isLoggedIn) {

return ;

}

return ;

}

ReactDOM.render(

// 尝试修改 isLoggedIn={true}:

,

document.getElementById('example')

);

声明周期

class Hello extends React.Component {

constructor(props) {

super(props);

this.state = {opacity: 1.0};

}

componentDidMount() {

this.timer = setInterval(function () {

var opacity = this.state.opacity;

opacity -= .05;

if (opacity < 0.1) {

opacity = 1.0;

}

this.setState({

opacity: opacity

});

}.bind(this), 100);

}

render () {

return (

Hello {this.props.name}

);

}

}

ReactDOM.render(

,

document.body

);

React AJAX

React 组件的数据可以通过 componentDidMount 方法中的 Ajax 来获取,当从服务端获取数据时可以将数据存储在 state 中,再用 this.setState 方法重新渲染 UI。

class UserGist extends React.Component {

constructor(props) {

super(props);

this.state = {username: '', lastGistUrl: ''};

}

componentDidMount() {

this.serverRequest = $.get(this.props.source, function (result) {

var lastGist = result[0];

this.setState({

username: lastGist.owner.login,

lastGistUrl: lastGist.html_url

});

}.bind(this));

}

componentWillUnmount() {

this.serverRequest.abort();

}

render() {

return (

{this.state.username} 用户最新的 Gist 共享地址:

{this.state.lastGistUrl}

);

}

}

ReactDOM.render(

,

document.getElementById('example')

);

React Refs

React 支持一种非常特殊的属性 Ref ,你可以用来绑定到 render() 输出的任何组件上。

React 实例

原创作者:Y狼人