@rg070836rg
2018-03-11T08:54:14.000000Z
字数 4531
阅读 1184
react
#
创建可复用的web组件
只提供mvc中的v层
组件化,无需 模板
比较容易理解(js逻辑和html紧密连接,可以在js中写html,无需以字符串或者url)
单项数据流:数据一旦更新,重新直接渲染整个app!
用户输入-->从api获得数据-->传输数据给顶层组件-->react渲染组件(依次下传)
重建dom树
查找差异
计算需要更新的部分
批量更新
基于js的XML语法扩展??
官方主页:
https://reactjs.org
安装node.js (win环境)
https://nodejs.org/en
可参考
http://blog.csdn.net/xxmeng2012/article/details/51492149
http://www.runoob.com/nodejs/nodejs-http-server.html
本次实践,不追求详解。
安装完之后,通过cmd,查看安装状态
node -v
npm -v
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题
C:\Users\chen>node -vv8.10.0C:\Users\chen>npm -v5.6.0
开发环境,webstorm+chrome
由于npm的国外速度很慢,切换成淘宝的
$ npm install -g cnpm --registry=https://registry.npm.taobao.org$ npm config set registry https://registry.npm.taobao.org
以后 使用
cnpm install [name]
支持主页:http://npm.taobao.org/
快速构建react环境
cnpm install -g create-react-appcd C:\Users\chen\WebstormProjects\firstcreate-react-app my-appcd my-app/npm start
尝试修改 app.js,效果如下

React JSX:React 使用 JSX 来替代常规的 JavaScript。
1.执行更快
2.编译可以发现错误
3.编写模板更快
简单学习:(缺少html的知识~)
推荐使用 内联样式表:
import React, { Component } from 'react';// import logo from './logo.svg';import './App.css';//内联样式表var myStyle = {fontSize: 100,color: '#FF0000'};class App extends Component {render() {return (<h1 style = {myStyle}>HELLO</h1>);}}export default App;
import React, { Component } from 'react';// import logo from './logo.svg';import './App.css';var arr = [<h1>11111</h1>,<h2>22222</h2>,];class App extends Component {render() {return (<div>{arr}</div>);}}export default App;
React,可以渲染 HTML标签或 React组件
区别就在于,变量名大小写,例子如下
var myDivElement = ;
var MyComponent = React.createClass({/.../});
render() {return (<section><h1>这是正确的例子</h1><span>假设这里是标题下面的内容</span></section>);}render() {return (<h1>这是错误的例子</h1>,<span>假设这里是标题下面的内容</span>);}
import React, { Component } from 'react';// import logo from './logo.svg';import './App.css';//!!!!!!class HelloMessage extends Component {render(){return <h1>Hello World!</h1>;}}class App extends Component {render() {return (<HelloMessage/>//!!!!!!!!!);}}export default App;
import React, {Component} from 'react';// import logo from './logo.svg';import './App.css';class Timer extends Component {//构造器constructor(props) {super(props);this.state = {seconds: 0};}tick() {this.setState(prevState => ({seconds: prevState.seconds + 1}));}//组件加载时,触发的事件componentDidMount() {this.interval = setInterval(() => this.tick(), 1000);}//事件:组件注销,清除定时器componentWillUnmount() {clearInterval(this.interval);}render() {return (<div>Seconds: {this.state.seconds}</div>);}}class App extends Component {render() {return (<Timer/>);}}export default App;
import React, {Component} from 'react';// import logo from './logo.svg';import './App.css';class HelloMessage extends Component {render() {return <h1>Hello {this.props.name}</h1>;}}class App extends Component {render() {return (<HelloMessage name="Runoob"/>);}}export default App;
import React, {Component} from 'react';// import logo from './logo.svg';import './App.css';class WebSite extends Component {render() {return (<div><Name name={this.props.name}/><Link site={this.props.site}/></div>);}}class Name extends Component {render() {return (<h1>{this.props.name}</h1>);}}class Link extends Component {render() {return (<a href={this.props.site}>{this.props.site}</a>);}}class App extends Component {render() {return (<WebSite name="少儿编程" site=" http://www.helloworldroom.com"/>);}}export default App;
React State(状态)
React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。
React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面(不要操作 DOM)。
import React, {Component} from 'react';// import logo from './logo.svg';import './App.css';class LikeButton extends Component {//构造器constructor(props) {super(props);this.state = {liked: false};// !!!!这个绑定是必要的,要不然该事件中的this就会是当前实例!!!!!!this.handleClick = this.handleClick.bind(this);}handleClick (){console.log(111)this.setState(prevState => ({liked: !prevState.liked}));}//或者使用箭头函数// handleClick= () =>{// console.log(111)// this.setState(prevState => ({// liked: !prevState.liked// }));// }render() {var text = this.state.liked ? '喜欢' : '不喜欢';return (<p onClick={this.handleClick}>你<b>{text}</b>我。点我切换状态。</p>);}}class App extends Component {render() {return (<LikeButton />);}}export default App;
import React, {Component} from 'react';// import logo from './logo.svg';import './App.css';class WebSite extends Component {constructor(props) {super(props);this.state = {name: "菜鸟教程",site: "http://www.runoob.com"};}render() {return (<div><Name name={this.state.name} /><Link site={this.state.site} /></div>);}}class Name extends Component {render() {return (<h1>{this.props.name}</h1>);}}class Link extends Component {render() {return (<a href={this.props.site}>{this.props.site}</a>);}}class App extends Component {render() {return (<WebSite />);}}export default App;