安裝create-react-apphtml
打開終端執行:npm i create-react-app -g
create-react-app AwesomeProject
執行yarn start
react
Debugger for Chrome
寫配置文件(launch.json)webpack
eg:web
{ "type": "chrome", "request": "launch", "name": "Chrome", "url": "http://localhost:3000", "webRoot": "${workspaceRoot}/src", "userDataDir": "${workspaceRoot}/.vscode/chrome", "sourceMapPathOverrides": { "webpack:///src/*": "${webRoot}/*" } }
在調試窗口點擊,開始調試.(須要先在終端執行yarn start
)chrome
導入其餘組件/對象/方法import
與暴露組件/對象/方法export
npm
常見用法:json
從MyText.js
中暴露一個組件
```js
import React, { Component } from 'react'babel
export default class MyText extends Component {app
}MyText.js
同級目錄下的一個文件中導入該組件js //說明: //路徑: './'表示同級目錄下的文件 //省略後綴: 後綴爲.js的能夠省略不寫 import MyText from './MyText'
從util.js
工具方法中暴露一個對象
```js
//形式1
export function func1() {dom
}
export function func2() {
}
//形式2 效果等同於 形式1
function func1() {
}
function func2() {
}
export default {從util.js
中導入對象或指定方法
```js
//導入整個對象
import util from './../util'
util.func1();
util.func2();
//導入指定方法
import {func1} from './../util'
箭頭函數(參數) => {函數體}
this
arguments
Promise
主要用於美化異步操做代碼, 使其可以有同步代碼的閱讀體驗, 避免出現地獄回調.
有三種狀態:
1. padding, 等待結果 2. reject, 拒絕/錯誤 3. resolve, 成功
eg:
```js
let func1 = () => {
let p = new Promise((resolve, reject) => {
setTimeout(() => {
if (true) {
resolve('success');
} else {
reject();
}
}, 500);
});
return p;
};
let func2 = () => {
let p = new Promise((resolve, reject) => {
setTimeout(() => {
if (false) {
resolve();
} else {
reject('error');
}
}, 500);
});
return p;
};
func
.then((data) => {
//500ms後執行 console.log(data); return func2();
})
.then(() => {
//未執行 console.log('1');
}, (errorData) => {
console.log(errorData);
})
.catch((errMsg) => {
//統一處理error console.error(errMsg);
});
```內部使用插值表達式, (關於表達式和語句的區別)
eg:
function greeting(text) { return <h1>{ text }</h1> } //單括號內部使用js表達式,例如: /* { number + 1 } { ok ? 'YES' : 'NO' } { message.split('').reverse().join('') } */
特殊的屬性寫法
eg:
class => className
const el1 = ( <div className="yourName"> <h1>hello</h1> <b>world</b> </div> );
src="example.jpg" => src={yourPath}
, typeof yourPath is Stringconst yourPath = 'example.jpg'; const el2 = { <img src={yourPath} /> }; //or const el3 = { <img src="example.jpg" /> //傳統html中屬性的寫法 }; //error const el4 = { <img src="yourPath" /> //路徑爲yourPath, 而不是example.jpg };
注意
在JavaScript語句中直接套用html標籤或者自定義組件等同於使用React.createElement()
方法, 固然這須要使用babel對其進行編譯.
React element是一個簡單的對象(原文: a plain Object), 由React.createElement()
方法獲得, 而且全部的React element構成React DOM.
js const element = React.createElement( 'h1', {className: 'greeting'}, 'Hello, world!' );
使用ReactDOM.render()
方法能夠在DOM
中注入React DOM
.
純React的項目通常來講只須要一個root DOM.而在一個已有的項目中, 你能夠提供多個dom節點, 做爲注入React DOM的入口.
create-react-app
默認支持的方法有:
"..."對象展開符
eg:
let obj1 = { name: 'zgatry', address: '杭州', age: 18 }; let obj2 = { ...obj1, age: 23 }; console.log(obj2); /* { name: 'zgatry', address: '杭州', age: 23 } */
Object.assign()方法