React起手式

1.如何引入React(開(kāi)發(fā)基本不使用這種方式)

  • CDN引入 (注意順序)
  • 引入React:https://.../react.x.min.js
  • 引入 ReactDOM:https://.../react-dom.x.min.js
cjs 和 umd 的區(qū)別
  • cjs 全稱CommonJS,是Node.js 支持的模塊規(guī)范
  • umd是統(tǒng)一模塊定義,兼容各種模塊規(guī)范(含瀏覽器)
  • 理論上優(yōu)先使用umd,同時(shí)支持Node.js和瀏覽器
  • 最新的模塊規(guī)范是使用import和export關(guān)鍵字
通過(guò)webpack引入React
  • yarn add react react-dom
  • import React from 'react'
  • import ReactDOM from 'react-dom'
  • 注意大小寫(xiě),盡量保持一致
  • 還可用create-react-app一鍵代替以上步驟
其他
  • 除webpack外,rollup、parcel也支持上面寫(xiě)法
引入React:新手用create-react-app,老手用webpack/rollup

2. 開(kāi)始創(chuàng)建React應(yīng)用

yarn global add create-react-app
create-react-app demo1(文件名)

然后一個(gè)React項(xiàng)目便初步搭建

// index.js
import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(
    <div>你好</div>,
    document.getElementById('root')
);

屏幕顯示'你好'

3. React 初體驗(yàn)

對(duì)比React元素和函數(shù)組件
  • App1 = React.createElement( 'div', null, n)
  • App1是一個(gè) React元素
  • App2 =()=> React.createElement( 'div', null,n)
  • App2是一個(gè) React函數(shù)組件
啟示
  • 函數(shù)App2是延遲執(zhí)行的代碼,會(huì)在被調(diào)用的時(shí)候執(zhí)行
  • 這是代碼執(zhí)行的時(shí)機(jī),并不是同步和異步
React元素
  • createElement的返回值element可以代表一個(gè)div
  • 但element并不是真正的div (DOM對(duì)象)
  • 所以我們一般稱element為虛擬DOM對(duì)象
()=> React 元素
  • 返回element的函數(shù),也可以代表一個(gè)div
  • 這個(gè)函數(shù)可以多次執(zhí)行,每次得到最新的虛擬div
  • React 會(huì)對(duì)比兩個(gè)虛擬div,找出不同,局部更新視圖
  • 找不同的算法就叫做DOM Diff算法

4. JSX初體驗(yàn)

Vue的模板寫(xiě)法 Vue-loader
  • .vue文件里寫(xiě)

  •   <template> <script> <style>
    
  • 通過(guò)vue-loader變成一個(gè)構(gòu)造選項(xiàng)

React的 JSX
  • 可以把

  •   <button onClick="add">+1</button>
    
  • 變成

  •   React.createElement('button',{onClick:...},'+1')
    
  • 與Vue-loader 類(lèi)似

  • 在 React 這里叫做 babel-loader ,并且被內(nèi)置在webpack里面了

  • 當(dāng)然也可以使用 CND 引入 babel-loader

使用 JSX
  1. 方法一
  • CND引入
  • 引入babel.min.js
  • 把<script>改成<script type="text/babel">
  • babel會(huì)自動(dòng)進(jìn)行轉(zhuǎn)譯(可以理解為翻譯),此處畫(huà)圖
  • 這種方式似乎并不支持src
  • 在生產(chǎn)環(huán)境下盡量不要使用 CND引入,效率太低
  • 他要下載一個(gè) babel.min.js
  • 它還要在瀏覽器端把 JSX 翻譯成 JS
//   引入 JSX 后的寫(xiě)法
<script type='text/babel'>
    let n = 0;
    const App = () => (
        <div>     // 標(biāo)簽直接寫(xiě)
                {n}   // 變量使用
            <button 
                onclick = {   // 函數(shù)花括號(hào)括起來(lái)
                () => {
                    n++;
                    render();
                }
            }
            >
                +1
            <button>
        </div>
    );
    const render = () => React.render(<App />,document.querySelector('#app'));
    render();
</script>
  1. 方法二

可以使用 webpacl + babel-loader

  1. 方法三

使用 create-react-app

  • 跟@vue/cli用法類(lèi)似
  • 全局安裝yarn global add create-react-app
  • 初始化目錄create-react-app react-demo-1
  • 進(jìn)入目錄cd react-demo-1
  • 開(kāi)始開(kāi)發(fā)yarn start
  • 這時(shí)App.js便會(huì)默認(rèn)就使用 jsx 語(yǔ)法
  • 這是因?yàn)閣ebpack 讓JS默認(rèn)走babel-loader
注意事項(xiàng)
  •   <div className='red'>n</div>   <!-- 類(lèi)名要寫(xiě)成className -->
    
  • 因?yàn)檫@會(huì)被翻譯成

  •   React.createElement('div',{className:'red'},'n');
    
  • 標(biāo)簽里面的所有JS代碼都要使用 {} 花括號(hào)包起來(lái)

5. 條件判斷

在 React 里面

const Compomnent = () => {
    return n%2 === 0 ? <div>n是偶數(shù)</div> : <span>n是奇數(shù)</span>;
}
// 如果需要外面的div,可以寫(xiě)成
const Component = () => {
    return (
        <div>
            {
                n%2 === 0? <div>n是偶數(shù)</div> : <span>n是奇數(shù)</span>
            }
        </div>
    )
}

還可以寫(xiě)成

const Component = () => {
    const content = (
        <div>
            {
                n % 2 === 0? <div> n是偶數(shù) </div> : <span> n是奇數(shù) </span>
            }
        </div>
    )
    return content
}

還可以寫(xiě)成

const Component = () => {
    const inner =  n% 2 ===0? <div> n是偶數(shù) </div> : <span> n是奇數(shù) </span>
    const content = (
        <div>
            { inner } 
         </div>
    )
    return content
}

如果想要使用 if else

const Component = () => {
    let inner
    if(n%2===0){
        inner = <div>n是偶數(shù)</div>
    } else {
        inner = <span> n是奇數(shù) </span>
    }
    const content = (
        <div>
            { inner }
        </div>
    )
    return content
}

6. 循環(huán)語(yǔ)句

在 React 里面使用循環(huán)

const Component = (props) => {
    return props.number.map((n,index) => {
        return <div>下標(biāo){index}值為{n}</div>
    })
}
//  如果需要使用外面的 div,可以寫(xiě)成
const Component = (props) => {
    return (
        <div>
            {
                props.number.map((n,index) => {
                    return <div> 下標(biāo) {index} 值為 {n} </div>
                })
            }
        </div>
    )
}

還可以這樣寫(xiě)

const Component = (props) => {
    const array = []
    for(let i = 0; i<props.length;i++){
        array.push(<div> 下標(biāo){i} 值為 {props.numbers[i]} </div>)
    }
    return <div>{ array }</div>
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.cdn引入,要引入兩個(gè)react,react-dom,注意順序先react,cdn很麻煩一般不使用, 2.um...
    Ories閱讀 386評(píng)論 0 0
  • 引入React CDN引入Reactbootcdn cjs 和 umd 的區(qū)別 cjs 全稱是 Common JS...
    fanison閱讀 558評(píng)論 0 0
  • 從CDN引入React(不推薦) 引入React要比Vue要麻煩,Vue只需引入一個(gè)即可,而React同時(shí)要引入三...
    luci_dity閱讀 459評(píng)論 0 0
  • React框架學(xué)習(xí) React的起源和發(fā)展 起初facebook在建設(shè)instagram(圖片分享)的時(shí)候嘞,因?yàn)?..
    hcySam閱讀 772評(píng)論 0 1
  • React框架學(xué)習(xí) React的起源和發(fā)展 React的出發(fā)點(diǎn) React與傳統(tǒng)MVC的關(guān)系 React高性能的體...
    J_Ronaldo閱讀 531評(píng)論 0 1

友情鏈接更多精彩內(nèi)容