使用 React 完成一個 TODOList

用 React 完成一個 todolist

嘗試一下以前沒有接觸過的框架: React。javascript

項目代碼連接:GitHubcss

項目預覽連接:Git Pageshtml

測試帳號:123vue

測試密碼:456java

經過使用 react 完成一個 TODOList,具備如下功能:react

1.能夠註冊並登陸,PC和移動端均可以使用webpack

註冊登陸

2.能夠添加/刪除 todo 選項git

添加/刪除

3.標記 todo 已完成github

selected

4.展現 todo 列表web


項目初始化

1.首先全局安裝 react:cnpm i create-react-app

2.進入項目目錄下輸入:create-react-app react-todolist

(熟悉 vue-cli 的話他的做用和 vue init webpack xxx是同樣的)

3.進入項目目錄,運行 cnpm start,而後他就會自動打開 http://localhost:3000/

一個 react 項目就初步構建並能夠運行了:

react


項目目錄

來看看運行命令後咱們獲得了一個什麼樣的項目骨架:

.
│  .gitignore
│  package-lock.json
│  package.json                 // 用於記錄項目及引用庫信息
│  README.md
├─public                        // 用於存放靜態資源
│      favicon.ico
│      index.html
│      manifest.json
│
└─src                           // 用於存放全部源代碼
        App.css
        App.js
        App.test.js
        index.css
        index.js                // 項目主入口
        logo.svg
        serviceWorker.js

在 package.json 中還配置了相關的 npm 腳本:

"scripts": {
    "start": "react-scripts start", // 執行 npm start ,至關於 vue-cli 中的 npm run dev,webpack 熱啓動
    "build": "react-scripts build", // 執行 npm build,至關於 vue-cli 中的 npm run build,打包構建文件
  },

執行 npm build 後,項目會生成一個 build 文件夾(至關於 vue-cli build 後生成的 dist,存放用於發佈的內容):

build
├── asset-manifest.json
├── favicon.ico
├── index.html
└── static
    ├── css
    │   ├── main.9a0fe4f1.css
    │   └── main.9a0fe4f1.css.map
    ├── js
    │   ├── main.19e75c9e.js
    │   └── main.19e75c9e.js.map
    └── media
        └── logo.5d5d9eef.svg

Hello World

在項目目錄下的 src/index.js 文件中修改:

// before
ReactDOM.render(<App />, document.getElementById('root'));

// after
ReactDOM.render(
    <h1>Hello, world!</h1>,
    document.getElementById('root')
);

再看看 http://localhost:3000/ ,咱們已經用 react 成功寫出了「Hello World」。

helloworld

在 public/index.html 中,有一個 id 爲 「root」 的 div 節點,代碼的做用,就是將 h1 標籤及其內容插入到這個節點中,因此咱們才能看到「Hello World」


部署

若是要把 react 項目部署到 GitHub Pages 的話,須要:

1.把 .gitignore 裏的 build 一行刪除

2.在 package.json 中添加: "homepage": "https://no1harm.github.io/react-todolist/build" (後面的值爲 gitpages 連接地址 + /build)

3.運行 cnpm build

4.從新 push 上 GitHub,能夠看到項目的正常預覽了。


入門 / 熟悉基本概念

React 入門教程

  • 把組件寫入單獨的文件:commit

  • 利用 props 傳遞數據:commit

  • state: commit

注意

setState不會馬上改變React組件中state的值

函數式的setState用法,如:

function increment(state, props) {
  return {count: state.count + 1};
}
function incrementMultiple() {
  this.setState(increment);
  this.setState(increment);
  this.setState(increment);
}

>一樣是把狀態中的count加1,可是狀態的來源不是this.state,而是輸入參數state

具體可參見這裏:setState

React 的生命週期包括三個階段:mount(掛載)、update(更新)和 unmount(移除)

mount:第一次讓組件出如今頁面中的過程。這個過程的關鍵就是 render 方法。React 會將 render 的返回值(通常是虛擬 DOM,也能夠是 DOM 或者 null)插入到頁面中。

其中的鉤子函數:

constructor()

componentWillMount()

render()

componentDidMount()

mount

update:mount 以後,若是數據有任何變更,就會來到 update 過程

其中鉤子函數:

componentWillReceiveProps(nextProps) - 我要讀取 props 啦!

shouldComponentUpdate(nextProps, nextState) - 請問要不要更新組件?true / false

componentWillUpdate() - 我要更新組件啦!

render() - 更新!

componentDidUpdate() - 更新完畢啦!

unmount:當一個組件將要從頁面中移除時,會進入 unmount 過程

其中鉤子函數:

componentWillUnmount()

生命週期鉤子函數

生命週期: commit

  • setState

嘗試生命週期各個階段 setState

setState

在對應報錯信息,逐漸刪除在生命週期鉤子中的 setState 後,得出結論:

通常只在這幾個鉤子裏 setState:

componentWillMount

componentDidMount

componentWillReceiveProps

在哪裏 setState


antd

問題:使用 antd 中的 Form .onSubmit 方法無效:

點擊提交按鈕,若是沒有執行 回調函數,緣由是按鈕須要包含在 form 表單內而且設置 htmlType={「submit」}。

點擊提交未報錯設置的 rules 未進行判斷是由於在 handleSubmit 內要設置 form.validateFields 進行域名校驗。


由於以前使用的框架是 Vue,對 react 遠談不上了解,多是先入爲主的緣由,我的仍是比較喜歡 Vue(由於對新人比較友好,文檔也很全面。寫得順手了,用起 react 來居然是有點無所適從…

不過這個 TODOList 總算是完成了,也算是對 react 有了一點粗淺的認知吧。

相關文章
相關標籤/搜索