學(xué)習(xí)React JSX 語法

為什么要使用React框架?

起初的前端,一個頁面可能要引用多個css樣式文件或者js腳本文件,但是由于樣式名稱或函數(shù)名可能存在重復(fù)术吝,而且樣式和函數(shù)都是全局變量,所以容易造成混亂茸苇,不利于頁面修改也不利于代碼復(fù)用排苍。
react框架通過用JS來寫HTML和CSS實現(xiàn)代碼組件化,消除了全局變量帶來的危害税弃,方便修改和代碼復(fù)用纪岁。

react install

  1. 首先確保電腦上安裝了node。
    可以用如下方法測試是否安裝了node(windows環(huán)境):
  • 打開cmd则果,輸入node -v,如果顯示了相關(guān)版本信息幔翰,說明node已安裝
  • 在cmd中輸入npm -v,如果顯示了相關(guān)版本信息,說明npm已安裝西壮。
  1. 安裝react
npm install -g create-react-app

3.新建react項目

create-react-app my-app
  1. 查看react是否正確安裝
cd my-app
npm start

ES6語法

  • class 是ES6定義的關(guān)鍵詞遗增。
  • 當(dāng)要引用多個類或者函數(shù)時,除第一個類或函數(shù)款青,其余都寫在花括號內(nèi)
  • extends 是ES6定義 繼承 的關(guān)鍵詞做修,后面跟著要繼承的父類。
  • export 表示導(dǎo)出抡草,單個函數(shù)/類在文件尾部加上 export default(默認(rèn)導(dǎo)出)+ 類/函數(shù)名饰及;多個函數(shù)或類導(dǎo)出時,要用export {class1康震,class2}導(dǎo)出燎含,否則類/函數(shù) 不可被其他文件調(diào)用。
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">Hello React</h1>
        </header>
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
      </div>
    );
  }
}

export default App;

什么是JSX腿短?

JSX是JavaScript Xhtml 的簡寫屏箍。
Xhtml 相較于其他html,語法要求更為嚴(yán)格橘忱。
例如:所有標(biāo)簽必須閉合赴魁,單個閉合標(biāo)簽尾部必須寫/。

<h1> </h1>
<img />

JSX語法

  • 所有標(biāo)簽必須閉合钝诚,單個閉合標(biāo)簽尾部必須寫/ 颖御;
  • 由于html關(guān)鍵詞與JSX關(guān)鍵詞沖突,在JSX代碼中用className代替class凝颇,htmlFor代替for 潘拱;
  • JSX代碼執(zhí)行規(guī)則:遇見<>時秉继,用html語法解析,遇見{ }用js語法解析 ;
  • render表示渲染泽铛,render是Component下的方法,此處是重定義render方法 ;
  • return 后的內(nèi)容必須寫在小括號內(nèi),括號里的內(nèi)容必須是一個閉合的標(biāo)簽 辑鲤。
  • 在JSX中我們通常是通過 {} 的方式插入值盔腔,但是設(shè)置style屬性需要{{ }} ,否則系統(tǒng)會報錯。
import classes form './myCss.css'
{/*JSX 中的注釋方式*/}

{/*style屬性必須使用 {{}} */}
<div style={{width: 20px; height=30px}}>
    { props.text }
</div>

{/*html class屬性*/}
<div className="myClass"></div>

{/*html input標(biāo)簽, JSX中所有的標(biāo)簽都必須有閉標(biāo)簽*/}
<input type="text" />

{/*html label標(biāo)簽 */}
<label htmlFor="name" class="mayName"></label>

{/*調(diào)用.css 文件中的css屬性, mycss 為css文件中的類*/}
<div className={classes['mycss']}></div>

react語法

  • React 要求class 類名首字母必須大寫月褥,否則無法渲染 ;
  • Component 是React的組件弛随,所有自定義的React組件必須繼承Component ;

部署React應(yīng)用到python-django生產(chǎn)環(huán)境

  1. 運行 npm run build 將會在 build 文件夾中創(chuàng)建一個編譯好的應(yīng)用,
  2. build文件夾下的static下的cssjs添加進(jìn)django工程文件中的statics文件夾下宁赤;
  3. build文件夾下的index.htm文件復(fù)制到templates文件夾中舀透;
  4. 在django views文件夾下創(chuàng)建新的視圖函數(shù)并添加一個鏈接 ;
  5. 在django settings文件下添加STATIC_URL = '/statics/' 設(shè)置讀取靜態(tài)文件的路徑决左。

在React中添加樣式

方法一:導(dǎo)入css文件

  1. import CSS文件 import "./App.css";
  2. 在React代碼中設(shè)置標(biāo)簽屬性來添加樣式愕够,屬性名為className ,屬性值為css文件中對應(yīng)的樣式名佛猛。

Html 塊級元素和行內(nèi)元素
區(qū)別:默認(rèn)在一行內(nèi)顯示的元素是行內(nèi)元素惑芭,默認(rèn)分行顯示的元素是塊級元素
轉(zhuǎn)換:在CSS樣式中,通過 display屬性進(jìn)行轉(zhuǎn)換继找,屬性值block表示塊級元素遂跟,屬性值inline表示行內(nèi)元素

import "./App.css";

class App extends Component{
    render(){
        return(
            <div>
                <h1>Hello {"Word"}</h1>
                <form>
                    <input type="text" placeholder="name" className="button"/>
                    <input type="password" placeholder="password"  className="button"/>
                    <input type="button" value="submit" className="button"/>
                </form>
            </div>
        )
    }
}

方法二:內(nèi)聯(lián)樣式

  1. 在類/函數(shù)的方法內(nèi),創(chuàng)建一個新的dict變量婴渡,以key-value的形式保存樣式幻锁。
  2. 此dict變量名,必須用駝峰式命名边臼,不能用連字符哄尔。
  3. value值必須為字符串;
  4. 在同個類/函數(shù)的方法的return括號內(nèi)硼瓣,直接在<>內(nèi)引用樣式style={button}
class App extends Component{
    render(){
        let button = {
            display:"block",
            border:"solid 2px red",
            color:"white",
            backgroundColor:"grey",
        }
        return(
            <div>
                <h1>Hello {"Word"}</h1>
                <form>
                    <input type="text" placeholder="name" style={button} />
                    <input type="password" placeholder="password"  style={button}/>
                    <input type="button" value="submit" style={button}/>
                </form>
            </div>
        )
    }
}

方法三:CSS in JS

  1. 安裝styled-components:
    在cmd內(nèi)輸入npm install styled-components
    (必須是局部安裝究飞,如果加上-g 全局安裝npm install -g styled-components,就無法找到這個模塊)
  2. import sytled import styled from "styled-components"
  3. 在類/函數(shù)的方法內(nèi)堂鲤,用關(guān)鍵字const直接定義一個常量亿傅,常量名首字母必須大寫,等號右邊styled.+ 標(biāo)簽名 + ```(一對反引號)瘟栖,在反引號內(nèi)直接寫css樣式代碼
  4. 在類/函數(shù)的return括號內(nèi)葵擎,直接以常量名作為組件來使用,可以在組件內(nèi)增加屬性(組件其實就是用JS寫的自定義標(biāo)簽)半哟。
import styled from "styled-components"

class App extends Component{
    render(){
        const Input = styled.input`
            display:block;
            border:solid 2px red;
            color:red;
            background-color:yellow
            input:hover{background-color:blue}
        `
        let button = {
            display:"block",
            border:"solid 2px red",
            color:"white",
            backgroundColor:"grey",
        }
        return(
            <div>
                <h1>Hello {"Word"}</h1>
                <form>
                    <input type="text" placeholder="name" style={button} />
                    <input type="password" placeholder="password"  style={button}/>
                    <Input type="number" />
                    <input type="button" value="submit" style={button}/>
                </form>
            </div>
        )
    }

組件react和setState

  • 在react中酬滤,屬性值不能修改签餐,要在類的頂部初始化this.state的值
constructor () {  //函數(shù)constructor()類同于django里的def __init__():{}
        super()  //The super keyword is used to access and call functions on an object's parent.
        this.state = { isLiked: false }  //以dict形式初始化this.state值。this類同于django里的self
    }
  • 方法中盯串,當(dāng)要修改this.state屬性值時氯檐,要用關(guān)鍵字 this.setState
handleClickOnLikeButton () {
        this.setState({
            isLiked: !this.state.isLiked // ‘!’表示邏輯“非”
        })
    }
  • 三元表達(dá)式
function three(x){
    if (x){
       return 1
    }else{
        return 2
    }
}

等同于

function four(x){
    return x?1:2
}

React中props的用法体捏?

  • 在React中冠摄,需要改變的值用this.state來定義;不需要改變几缭,只需要傳參的值用this.props來定義河泳。
  • “this."是在ES6語法類中的定義,相當(dāng)于python中類中的“self”
  • 調(diào)用React組件時年栓,要給組件傳參
 <Ctable hea={hea} colu={colu} />

如何在React里跨文件調(diào)用組件拆挥?

  1. 在文件頂部 import 要調(diào)用的組件及來自的文件。
    例如:import Ctable from "./static/css_table.js"
  2. 在組件內(nèi)引用外部組件時某抓,只需要以< componentName 參數(shù)名稱={具體數(shù)據(jù)} />格式就可以
    例如:<Ctable hea={hea} colu={colu} />
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纸兔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子否副,更是在濱河造成了極大的恐慌食拜,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件副编,死亡現(xiàn)場離奇詭異负甸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)痹届,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門呻待,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人队腐,你說我怎么就攤上這事蚕捉。” “怎么了柴淘?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵迫淹,是天一觀的道長。 經(jīng)常有香客問我为严,道長敛熬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任第股,我火速辦了婚禮应民,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己诲锹,他們只是感情好繁仁,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著归园,像睡著了一般黄虱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庸诱,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天悬钳,我揣著相機(jī)與錄音,去河邊找鬼偶翅。 笑死,一個胖子當(dāng)著我的面吹牛碉渡,可吹牛的內(nèi)容都是我干的聚谁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼滞诺,長吁一口氣:“原來是場噩夢啊……” “哼形导!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起习霹,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤朵耕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后淋叶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阎曹,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年煞檩,在試婚紗的時候發(fā)現(xiàn)自己被綠了处嫌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡斟湃,死狀恐怖熏迹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凝赛,我是刑警寧澤注暗,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站墓猎,受9級特大地震影響捆昏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜毙沾,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一屡立、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦膨俐、人聲如沸勇皇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敛摘。三九已至,卻和暖如春乳愉,著一層夾襖步出監(jiān)牢的瞬間兄淫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工蔓姚, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留捕虽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓坡脐,卻偏偏與公主長得像泄私,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子备闲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容