React01

目錄

  • React-day01 入門知識
    • React介紹
      • 官網
    • React開發環境初始化 SPA
      • 腳手架初始化項目(方便,穩定)*
      • 通過webpack進行初始化
      • 配置鏡像地址
    • 開發工具配置
    • 元素渲染
    • 組件及組件狀態
      • 函數定義組件(無狀態)
      • 類定義組件(有狀態)*
      • 組合組件
      • Props屬性*
      • State狀態*
    • 組件生命周期
    • 事件處理
      • 定義組件事件
      • 屬性初始化器語法*
      • 參數傳遞*
      • 計數器游戲
    • style樣式(JSX寫法)

React-day01 入門知識

React介紹

Facebook臉書-> Instagram照片墻 。 于2013年5月開源

幫助開發者簡潔、直觀地構建高性能的UI界面

  • 高效:模擬Doument Object Model,減少DOM交互 (速度快)
  • 靈活:可以與已知的庫配合使用
  • 聲明式: 幫助開發者直觀的創建UI
  • 組件化:把相似的代碼通過封裝成組件進行復用

官網

官方網站: https://reactjs.org/

中文網站: https://doc.react-china.org/

React開發環境初始化 SPA

  • react :React開發必備庫
  • react-dom:web開發時使用的庫,用于虛擬DOM,移動開發使用ReactNative

腳手架初始化項目(方便,穩定)*

  • 執行初始化命令:

    #保證Node版本>=6
    npm install -g create-react-app
    create-react-app my-appcd my-app
    npm start
    ## 如果npm版本5.2.0+,可以使用npx進行初始化
    npx create-react-app my-appcd my-app
    npm start
  • npm和yarn命令對比

通過webpack進行初始化

步驟文檔

配置鏡像地址

  • 查看當前鏡像配置:

    npm config list

    npm config get registry

  • 設置當前鏡像地址

    npm config set registry https://registry.npm.taobao.org/

    npm config set disturl https://npm.taobao.org/dist

開發工具配置

  • 添加JavaScript語法支持
  • 安裝開發插件: JavaScript,npm, markdown, Node.js, Reactjs

元素渲染

  • 元素是構成React應用的最小單位

    import React from 'react';
    import ReactDOM from 'react-dom';const element = (<div><h1>HaHa!</h1><h2>Hello Itheima element</h2></div>
    );// ReactDOM進行元素渲染
    ReactDOM.render(element,document.getElementById('root')
    );
  • React對JSX語法轉換

    const element = (    <div className="eleClass">        HaHa!  </div>
    );

    轉換js后

    const element = React.createElement("div",{ className: "eleClass" },"HaHa!"
    );

組件及組件狀態

組件可以將界面分割成獨立的、可復用的組成部分。只需要專注于構建每個單獨的部分。比如按鈕,對話框,列表,輸入框都是組件。

  • 組件可以接受參數(props),可以返回一個在頁面上展示的React元素

函數定義組件(無狀態)

無狀態組件:一般用于簡單的頁面展示

// 用函數定義了名為Hello組件
function Hello(props) {return <h1>Hello {props.name} !</h1>;
}// react進行元素渲染
ReactDOM.render(<Hello name="itheima props"/>,document.getElementById('root')
);

類定義組件(有狀態)*

  • class 必須要ES6支持

有狀態組件:可以維護自己的狀態State信息,完成更加復雜的顯示邏輯

// 用類定義 名為Hello組件
class Hello extends React.Component {render(){return <h1>Hello {this.props.name} !</h1>;}
}// react進行元素渲染
ReactDOM.render(<Hello name="itheima class"/>,document.getElementById('root')
);
  • 以上兩種組件效果在React相同

類定義組件名稱必須是大寫

建議在return元素時,用小括號()包裹

組合組件

  • 組件之間可以相互引用,通常把App作為根組件

    // 用類定義 名為Hello組件
    class Hello extends React.Component {render() {return <h1>Hello {this.props.name} !</h1>;}
    }
    // 根組件
    function App(props) {return (<div><div><h2>團隊名稱: {props.team}</h2><p>成員個數: {props.count}</p><p>成立時間: {props.date.toLocaleString()}</p></div><Hello name="悟空" /><Hello name="八戒" /><Hello name="沙僧" /><Hello name="三藏" /></div>);
    }
    // react進行元素渲染
    ReactDOM.render(<App team="西天取經團" count={4} date={new Date()}/>,document.getElementById('root')
    );

    ?

  • 注意:組件的返回值只能有一個根元素,所以用一個div包裹所有Hello元素

  • 在google插件市場搜索安裝React查看DOM結構

Props屬性*

  • props有兩種輸入方式:
    • 引號"" :輸入字符串值,
    • 大括號{} :輸入JavaScript表達式,大括號外不要再添加引號。
  • props的值不可修改,屬性只讀,強行修改報錯
  • 類定義組件中使用props需要在前邊加 this.

State狀態*

  • 自動更新的時鐘

    class Clock extends Component {render(){return (<div><h1>當前時間:</h1><h3>current: {new Date().toLocaleString()}</h3></div>);}
    }setInterval(() => {ReactDOM.render(<Clock />,document.getElementById('root'));
    }, 1000);

    應用一般執行一次ReactDOM.reader() 渲染

    在組件內部進行更新, 每個時鐘內部都維護一個獨立的date信息

  • 在組件內部使用局部state狀態屬性

    class Clock extends Component {constructor(props) {super(props);// state定義:在constructor構造函數進行state狀態的初始化this.state = {title: "時鐘標題",date: new Date()};setInterval(() => {this.tick();}, 1000);}tick(){// 更新date, 數據驅動, 必須通過setState函數修改數據并更新uithis.setState({date: new Date()})}render(){return (<div><h1>{this.state.title}</h1><h3>current: {this.state.date.toLocaleString()}</h3></div>);}
    }ReactDOM.render(<Clock />,document.getElementById('root')
    );
  • state特性:

    1. state 一般在構造函數初始化。this.state={...}
    2. state可以修改,必須通過this.setState({...})更新并渲染組件
    3. 調用setState更新狀態時,React最自動將最新的state合并到當前state中。

組件生命周期

React中組件的生命周期

  • 生命周期常用的函數

    componentDidMount:組件已掛載, 進行一些初始化操作

    componentWillUnmount: 組件將要卸載,進行回收操作,清理任務

事件處理

定義組件事件

class App extends Component {handleClick(e){console.log("handleClick!")console.log(this);}render(){return (<div><button onClick={() => this.handleClick()}>按鈕:{'{() => this.handleClick()}'}</button></div>);}
}

屬性初始化器語法*

// 屬性初始化器語法 (Property initializer syntax)
handleClick = () => {console.log("handleClick!")console.log(this);
}

參數傳遞*

class App extends Component {handleClick(e, str, date){ // 參數要和調用者傳入的一一對應console.log(this)console.log(e)console.log(str, date)}render(){return (<button onClick={(e)=>this.handleClick(e, "參數" , new Date())}>按鈕1:{'箭頭函數'}</button>);}
}

參數要和調用者傳入的一一對應

計數器游戲

import React, { Component } from 'react';
import ReactDOM from 'react-dom';// 類定義組件的寫法
class App extends Component {constructor(props) {super(props);// 綁定this到事件函數this.countPlus = this.countPlus.bind(this);this.state = { count: 0,timeSurplus: 10};}// 組件已掛載, 開啟周期任務componentDidMount() {this.timerId = setInterval(() => {this.setState((preState) => ({timeSurplus: preState.timeSurplus - 1}))// 在合適的時候, 結束周期函數if(this.state.timeSurplus <= 0){clearInterval(this.timerId)}}, 1000);}countPlus(){// 更新當前count數字.console.log(this)// 如果時間到了, 返回if (this.state.timeSurplus <= 0){return;}// 更新數據會自動觸發UI的重新render// this.setState({//     count: this.state.count + 1// })// 通過之前state狀態更新現在的狀態this.setState((preState) => ({count: preState.count + 1}))}render() {return (<div><h1>{this.props.title}</h1><h2>{this.state.timeSurplus <= 0 ? ("時間到, 總數" + this.state.count) : ("剩余時間:" + this.state.timeSurplus)}</h2><button onClick={this.countPlus}>計數: {this.state.count}</button></div>);}
}ReactDOM.render(<App title="計數器, 試試你的手速!"/>,document.getElementById('root')
);

style樣式(JSX寫法)

  1. 直接寫在style屬性中

    <button style={{width: 200, height: 200}}>我是按鈕</button>
  2. 通關變量聲明樣式并引用

    const btnStyle = { width: 200, height: 200 };
    ...
    <button style={btnStyle} onClick={this.handleClick}>我是按鈕</button>

    ?

轉載于:https://www.cnblogs.com/xiaocongcong888/p/9436171.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251002.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251002.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251002.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法 --- 反轉數組

幾個注意點: 1.輸出的時候,也要做數字超出處理 2.js中可以使用 str -0 將字符串類型轉換成數字類型 ( 注意不是 0) 3.可以使用 num ‘’ 將數字類型轉換成字符串類型 4.使用str.split(’’) 可以將字符串轉換成數組 5.使用arr.join(’’) 可以將數組轉換成字符串 6.JS中2的31次…

ES6-13 正則方法、修飾符yus、UTF_16編碼方式

修飾符 m multiLine 對于str中含\n的情況g globali ignoreCase 元字符 反斜杠加轉義 元字符含義簡寫\w匹配字母、數字、下劃線。等價于’[A-Za-z0-9_]’。word\W匹配非字母、數字、下劃線。等價于 ‘[^A-Za-z0-9_]’。\s匹配任何空白字符&#xff0c;包括空格、制表符、換頁…

svn文件大小類型限制,提交必須加多少字的說明

#!/bin/shREPOS"$1" TXN"$2" #此處更改大小限制&#xff0c;這里是5M MAX_SIZE5242880 #此處增加限制文件后綴名 FILTER\.(zip|rar|o|obj|tar|gz)$SVNLOOK/usr/bin/svnlookLOGMSG$SVNLOOK log -t "$TXN" "$REPOS" | wc -cif [ "$…

cmd窗口快速定位到具體文件夾方法

在用Python進行機器實戰時&#xff0c;打開cmd窗口后&#xff0c;總是到定位到kNN.py所在文件夾才能Python&#xff08;否則import kNN失敗&#xff09;&#xff0c;每次都要輸入地址非常麻煩 這里介紹一個cmd窗口快速定位到具體文件夾方法&#xff1a; 按住Shift鍵右擊鼠標打開…

算法 --- 羅馬數字轉整數

解體思路: 1.寫一個對象trans用于保存羅馬和數字之間的映射關系 2.重點在于當數值小的出現在數值大的左邊時,會減去該數,出現在右邊時會加上該數,因此需要與后面的進行比較 3.在得到s時,首先給它轉換成字符串,并在末位加一個0 /*** param {string} s* return {number}*/ var r…

正則 - 阮一峰

學習地址 一 正則實例方法 1. test 正則實例.test返回布爾值 var r /x/g; var s _x_x;r.lastIndex // 0 r.test(s) // truer.lastIndex // 2 r.test(s) // truer.lastIndex // 4 r.test(s) // false死循環&#xff0c;因為while循環的每次匹配條件都是一個新的正則表達式…

LintCode 6.合并排序數組 ||

import org.junit.Test;import java.util.Arrays;public class MergeSort {/*** param A: sorted integer array A* param B: sorted integer array B* return: A new sorted integer array* <p>* 合并排序數組 II* 合并兩個排序的整數數組A和B變成一個新的數組。* <p…

算法 --- 有效的括號

解題思路: 1.對括號分別賦值(左括號大于0,右括號小于0),方便后期比較 2.使用棧,對于大于0的字符串入棧,對于小于0的字符串,檢查棧中是否有元素,若沒有返回false,否則拿出棧頂的一個元素,和現在的元素進行比較 /** * param {string} s * return {boolean} */ var isValid func…

ES6-14 Unicode表示法、字符串方法、模板字符串

Unicode表示法 本身能正常識別的&#xff0c;加{}也能識別&#xff0c;花括號內的內容表示碼點 parseInt(0061,16) // 十進制的97&#xff0c;97在ASCII碼中對應a console.log(\u0061) // a console.log(\u{0061}) // a console.log(\u{61}) // a原型上方法 codePointAt(十進…

對 js 高程 Preflighted Reqeusts 的理解

看JS高程遇到 Preflighted Reqeusts不大理解&#xff0c;遂百度下&#xff1a;轉自&#xff1a;http://todoit.me/ajax-preflight/最近在做一個 VUE 的項目的時候, 和后端的小伙伴對接口, 想方便開發, 于是要求后端的小伙伴在所有的接口都加上跨域的許可 (Access-Control-Allow…

算法 --- 刪除數組中重復項

解題思路: 如果輸入的數組長度為1,則返回該數組否則(len>2),使用i記錄當前待插入的位置,j記錄下一個與nums[i]不相等的位置,leng為待返回數組的長度當nums[i] ! nums[j]時,把j位置的值nums[j]放在i1位置.同時i,j /*** param {number[]} nums* return {number}*/ var remov…

如何理解 Linux 中的 load averages

原文&#xff1a;https://mp.weixin.qq.com/s?src11&timestamp1533697106&ver1047&signaturepoqrJFfcNABv4biKKpa4mZdIW7No2Wo1F5sbZL7ggoVS2GqcSqwQQ8hMulAmezT*zL*klB-eE5BeMyNuyjuIH7YgkBAN25i6*ahhEpWyxqx6vPct-Vr7q7AU0YGe-F*l&new1 http://blog.scoutap…

Jsp+Servlet+MYSQL注冊登錄案例(界面難看,ε=(′ο`*)))唉)

注冊登錄界面尤為常見&#xff0c;我的界面尤為難看&#xff0c;勉為其難的寫吧&#xff0c;前端不熟就是這樣。。。 這個案例運用到了: 1.Jsp動態頁面--->動態頁面 2.Servlet邏輯判斷后臺---->實現界面與數據庫/業務的連接&#xff0c;簡而言之&#xff0c;起承轉合。PS…

ES6-15 map與set

Promise、Proxy、Map、Set這些ES6新增的api無法用babel實現語法降級&#xff0c;需要使用到polyfill Set 成員是唯一的&#xff0c;不能重復有iterator接口&#xff0c;可迭代具有iterator接口的所有類型&#xff0c;都能作為new Set()的參數&#xff0c;如類數組、數組 con…

jquery --- DOM操作、表單元素的初始化

1.獲取ul里第2個li節點: var $li_two $("ul li:eq(1)"); // 獲取該節點的內容 var $li_two_txt $li_two.text();2.獲取p元素節點的title屬性: var $para $("p"); var p_title $para.attr("title");3.創建2個li節點,并添加道ul中: var $li…

Jquery中post與get之間的區別詳細介紹

1:GET訪問瀏覽器認為是等冪的 GET訪問瀏覽器認為是等冪的&#xff0c;就是一個相同的URL只有一個結果&#xff0c;相同是指整個URL字符串完全匹配。所以&#xff0c;第二次訪問的時候&#xff0c;如果URL字符串沒變化 瀏覽器是直接拿出了第一次訪問的結果&#xff1b; POST則認…

LeetCode 424. Longest Repeating Character Replacement

原題鏈接在這里&#xff1a;https://leetcode.com/problems/longest-repeating-character-replacement/description/ 題目&#xff1a; Given a string that consists of only uppercase English letters, you can replace any letter in the string with another letter at mo…

ES6-16 WeakMap與WeakSet、proxy與reflect

WeakMap/WeakSet 原型上不存在遍歷方法(沒有部署iterator接口)成員只能是對象垃圾回收機制不考慮對成員對象的應用 WeakSet/WeakMap 中的對象都是弱引用&#xff0c;即垃圾回收機制不考慮 WeakSet 對該對象的引用&#xff0c;也就是說&#xff0c;如果其他對象都不再引用該對象…

jquery--- 屬性和樣式的操作 設置和獲取HTML、文本和值、焦點事件

1.獲取p元素的title屬性: var title $("p").attr("title");2.給p元素加title屬性(值為:栗子)和date屬性(值為:2019/7/15): $("p").attr("title":"栗子", "date":"2019/7/15");3.刪除p中的title屬性:…

day9

前方高能---初識函數 一. 什么是函數 函數:對代碼塊和功能的封裝和定義. 二. 函數的定義,函數名,函數體,以及函數的調用 def 函數名(): 函數體 函數體:就是函數被執行之后要執行的代碼. 三, 函數的返回 執行完函數之后,我們可以使用return來返回結果. 函數中return的使用: 1.函…