整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          快速上手React

          eb前端三大主流框架

          1、Angular

          大家眼里比較牛的框架,甚至有人說三大框架中只有它能稱得上一個完整的框架,因為它包含的東西比較完善,包含模板,數據雙向綁定,路由,模塊化,服務,過濾器,依賴注入等所有功能。對于剛開始學習使用框架的小伙伴們,可以推薦這個框架,學會之后簡直能顛覆之前你對前端開發的認知。使用 TypeScript能夠提高代碼可維護性,有利于后期重構。雙向數據流很方便,但是等業務復雜之后,你可能就搞不清楚數據流了。還有令人不開心的臟值檢查,以及directive的封裝并沒有解決視圖與數據關系完全分離,有時候還要用$digist強制觸發檢測。

          2、React(也是接下來要講的)

          這個框架本身比較容易理解,它的結構很清晰,就是由十幾個API組成,然后異步渲染,我們只需要處理好接口和維護就好了,但是很多人反映上手還是有一定的的難度的。React是單向數據流,代碼寫起來會較雙向數據流多一些,但是同樣的排查問題時思路清晰很多。

          3、Vue

          號稱是最簡單,最容易上手的框架,同時也是行內的大趨勢,還可以用來開發最火的小程序。畢竟用這神器,代碼碼得飛快,項目也能快速上線。同時他也是雙向數據流。有些人認為Vue是Angular和React的結合,既有Angular的模板語法也有React的組件化體系。

          React 簡介

          React 起源于 Facebook 內部項目,用來架設 Instagram 網站,并于 2013 年 5 月開源。React 擁有較高的性能,代碼邏輯非常簡單,越來越多的人已開始關注和使用它。

          1、React 主要的原理

          • Virtual DOM 虛擬 DOM; 傳統的 web 應用,操作 DOM 一般是直接更新操作的,DOM 更新通常是比較昂貴的。而 React 為了盡可能減少對 DOM 的操作,提供了一種不同的而又強大的方式來更新 DOM,代替直接的 DOM 操作。就是 Virtual DOM,一個輕量級的虛擬的 DOM,就是 React 抽象出來的一個對象,描述 DOM 應該是什么樣子的,應該如何呈現。通過這個 Virtual DOM 去更新真實的 DOM,由這個 Virtual DOM 管理真實 DOM 的更新。知了堂Java8.0版,讓你少走彎路,擺脫就業困境!
          • React 有個 diff 算法,更新 Virtual DOM 并不保證馬上影響真實的 DOM,React 會等到事件循環結束,然后利用這個 diff 算法,通過當前新的 dom 表述與之前的作比較,計算出最小的步驟更新真實的 DOM。

          2、使用 React 應用腳手架 create-react-app

          • 開箱即用
          • 安裝 Node.js 環境
            • npm install -g create-react-app
            • create-react-app demo-app
            • cd demo-app
            • npm start

          package.json 說明

          • scripts
          "scripts": {
              "start": "react-scripts start", // 開始運行項目
              "build": "react-scripts build", // 生成環境構建
              "test": "react-scripts test", // 測試用例
              "eject": "react-scripts eject" // 自定義 webpack 配置
            },
          
          • dependencies React 運行所需依賴
          "dependencies": {
            ...
              "react": "^17.0.1",
              "react-dom": "^17.0.1",
              "react-scripts": "4.0.3"
            ...
            },
          

          3、運行項目 npm start,項目默認在 3000 端口,

          • http://localhost:3000/

          4、React JSX 語法

          • 使用 ReactDOM.render 進行渲染
          const element = <div>這是一個元素</div>;
          ReactDOM.render(element, document.getElementById("app"));
          
          • 可以通過 jsx 定義 html 元素,render 函數進行渲染。 注意:在渲染的根節點只允許一個元素存在,不然會報錯,不能正常渲染。
          • 設置樣式時不能用 class 設置, 用 className 進行設置。
          • 使用 style, 需要使用 大寫
          const styleName = { marginLeft: 10 };
          const element = <div style={styleName}>測試應用</div>;
          ReactDOM.render(element, document.getElementById("app"));
          
          • 定義事件,React 事件和原生 html + js 定義事件一直,React 定義事件需要大寫,駝峰命名
          const element = (
            <div>
              <p
                onClick={() => {
                  console.log("點擊事件");
                } }
              >
                事件定義
              </p>
            </div>
          );
          ReactDOM.render(element, document.getElementById("app"));
          
          • 簡單表達式
          const element = <div>{1 + 1}</div>;
          ReactDOM.render(element, document.getElementById("app"));
          const element = <h1>{index == 1 ? "顯示" : "不顯示"}</h1>;
          ReactDOM.render(element, document.getElementById("app"));
          
          • 注釋

          5、React 組件化

          • 在 react 中,一切皆組件,根據劃分不同組件,可以使代碼復用,減少代碼編寫
          • 定義組件分 ES6 和 函數組件,2021國家護網行動人才招募中
          • ES6 class 方式定義需要繼承 React.Component,實現 render 函數,返回一個元素
          class ClassComponent extends React.Component {
            render() {
              return <div>是一個 Class 組件</div>;
            }
          }
          

          • 函數組件
          const FunctionComponent = () => <div>是一個 Function 組件</div>;
          

          • 瀏覽器查看效果

          6、React state & props

          • state 在 react 組件中可以保存當前所操作數據狀態
          • props 可以通過父子組件進行數據傳遞和交互
          • 使用 ES6 組件方式使用 state
          class ClassComponent extends React.Component {
            state = {
              count: 0,
            };
            handleAdd = () => {
              const { count } = this.state;
              this.setState({ count: count + 1 });
            };
            handleReduce = () => {
              const { count } = this.state;
              this.setState({ count: count - 1 });
            };
            render() {
              const { count } = this.state;
              return (
                <div>
                  <p>Class 組件</p>
                  <p>點前計數 {count}</p>
                  <button onClick={this.handleAdd}>加</button>
                  <button onClick={this.handleReduce}>減</button>
                </div>
              );
            }
          }
          
          • 使用 函數 組件方式使用 state
          • 函數組件操作 state 可以使用 hooks 操作
          • hooks 函數為 React 16.8 引入新 API,方便處理傳統 React 方式操作數據
          import React, { useState } from "react";
          const FunctionComponent = () => {
            const [count, setCount] = useState(0);
            const handleAdd = () => {
              setCount(count + 1);
            };
            const handleReduce = () => {
              setCount(count - 1);
            };
            return (
              <div>
                <p>Function 組件</p>
                <p>點前計數 {count}</p>
                <button onClick={handleAdd}>加</button>
                <button onClick={handleReduce}>減</button>
              </div>
            );
          };
          

          7、props 使用

          • 定義
          const App = () => {
            return (
              <div className="App">
                <ClassComponent title="Class Props Title" />
                <FunctionComponent title="Function Props Title" />
              </div>
            );
          };
          export default App;
          

          • 接收,使用
          • Class 組件

          • Function 組件

          • 效果

          8、React 生命周期

          • 16.x 和 17.x 版本,對應生命周期函數有所變化
          • 被打橫線生命周期函數在 React 17.x 版本已被移除,不建議使用

          • 常用生命周期函數
          // 組件被掛載
            componentDidMount() {}
            // 發生異常
            componentDidCatch() {}
            // 組件重新渲染 組件狀態 || 屬性改變
            componentDidUpdate() {}
            // 判斷組件是否應該重新渲染,默認 true
            shouldComponentUpdate(nextProps, nextState) {}
            // 組件將被卸載
            componentWillUnmount() {}
          
          • componentDidMount 數據加載,網絡請求
          • componentDidCatch 捕獲異常,上報
          • shouldComponentUpdate 組件發生變化,需要重新調整邏輯,重新渲染組件
          • componentWillUnmount 清除資源,比如定時器,防止內存泄露

          9、hooks useEffect

          useEffect(() => {
            // did mount
            // ajax request
            return () => {
              // un mount
              // clear resource
            };
            // 當 value 發生變化,重新觸發
          }, [value]);
          
          • 總結

          能夠正確使用 React 生命周期函數和 state & props,事件定義。可以解決大部分 React 項目開發。

          好啦,這次就為大家分享這些了,更多前端學習資源,歡迎關注我們~

          自:coderwhy


          前面說過,整個前端已經是組件化的天下,而CSS的設計就不是為組件化而生的,所以在目前組件化的框架中都在需要一種合適的CSS解決方案。

          一. React中的css方案

          1.1. react中的css

          事實上,css一直是React的痛點,也是被很多開發者吐槽、詬病的一個點。

          在組件化中選擇合適的CSS解決方案應該符合以下條件:

          • 可以編寫局部css:css具備自己的具備作用域,不會隨意污染其他組件內的原生;
          • 可以編寫動態的css:可以獲取當前組件的一些狀態,根據狀態的變化生成不同的css樣式;
          • 支持所有的css特性:偽類、動畫、媒體查詢等;
          • 編寫起來簡潔方便、最好符合一貫的css風格特點;
          • 等等...

          在這一點上,Vue做的要遠遠好于React:

          • Vue通過在.vue文件中編寫 <style><style> 標簽來編寫自己的樣式;
          • 通過是否添加 scoped 屬性來決定編寫的樣式是全局有效還是局部有效;
          • 通過 lang 屬性來設置你喜歡的 less、sass等預處理器;
          • 通過內聯樣式風格的方式來根據最新狀態設置和改變css;
          • 等等...

          Vue在CSS上雖然不能稱之為完美,但是已經足夠簡潔、自然、方便了,至少統一的樣式風格不會出現多個開發人員、多個項目采用不一樣的樣式風格。

          相比而言,React官方并沒有給出在React中統一的樣式風格:

          • 由此,從普通的css,到css modules,再到css in js,有幾十種不同的解決方案,上百個不同的庫;
          • 大家一直在尋找最好的或者說最適合自己的CSS方案,但是到目前為止也沒有統一的方案;

          在這篇文章中,我會介紹挑選四種解決方案來介紹:

          • 方案一:內聯樣式的寫法;
          • 方案二:普通的css寫法;
          • 方案三:css modules;
          • 方案四:css in js(styled-components);

          1.2. 普通的解決方案

          1.2.1. 內聯樣式

          內聯樣式是官方推薦的一種css樣式的寫法:

          • style 接受一個采用小駝峰命名屬性的 JavaScript 對象,,而不是 CSS 字符串;
          • 并且可以引用state中的狀態來設置相關的樣式;
          export default class App extends PureComponent {
            constructor(props) {
              super(props);
          
              this.state = {
                titleColor: "red"
              }
            }
          
            render() {
              return (
                <div>
                  <h2 style={{color: this.state.titleColor, fontSize: "20px"}}>我是App標題</h2>
                  <p style={{color: "green", textDecoration: "underline"}}>我是一段文字描述</p>
                </div>
              )
            }
          }

          內聯樣式的優點:

          • 1.內聯樣式, 樣式之間不會有沖突
          • 2.可以動態獲取當前state中的狀態

          內聯樣式的缺點:

          • 1.寫法上都需要使用駝峰標識
          • 2.某些樣式沒有提示
          • 3.大量的樣式, 代碼混亂
          • 4.某些樣式無法編寫(比如偽類/偽元素)

          所以官方依然是希望內聯合適和普通的css來結合編寫;

          1.2.2. 普通的css

          普通的css我們通常會編寫到一個單獨的文件。

          App.js中編寫React邏輯代碼:

          import React, { PureComponent } from 'react';
          
          import Home from './Home';
          
          import './App.css';
          
          export default class App extends PureComponent {
            render() {
              return (
                <div className="app">
                  <h2 className="title">我是App的標題</h2>
                  <p className="desc">我是App中的一段文字描述</p>
                  <Home/>
                </div>
              )
            }
          }

          App.css中編寫React樣式代碼:

          .title {
            color: red;
            font-size: 20px;
          }
          
          .desc {
            color: green;
            text-decoration: underline;
          }

          這樣的編寫方式和普通的網頁開發中編寫方式是一致的:

          • 如果我們按照普通的網頁標準去編寫,那么也不會有太大的問題;
          • 但是組件化開發中我們總是希望組件是一個獨立的模塊,即便是樣式也只是在自己內部生效,不會相互影響;
          • 但是普通的css都屬于全局的css,樣式之間會相互影響;

          比如編寫Home.js的邏輯代碼:

          import React, { PureComponent } from 'react';
          
          import './Home.css';
          
          export default class Home extends PureComponent {
            render() {
              return (
                <div className="home">
                  <h2 className="title">我是Home標題</h2>
                  <span className="desc">我是Home中的span段落</span>
                </div>
              )
            }
          }

          又編寫了Home.css的樣式代碼:

          .title {
            color: orange;
          }
          
          .desc {
            color: purple;
          }

          最終樣式之間會相互層疊,只有一個樣式會生效;

          1.2.3. css modules

          css modules并不是React特有的解決方案,而是所有使用了類似于webpack配置的環境下都可以使用的。

          但是,如果在其他項目中使用,那么我們需要自己來進行配置,比如配置webpack.config.js中的modules: true等。

          但是React的腳手架已經內置了css modules的配置:

          • .css/.less/.scss 等樣式文件都修改成 .module.css/.module.less/.module.scss 等;
          • 之后就可以引用并且進行使用了;

          使用的方式如下:

          css modules用法

          這種css使用方式最終生成的class名稱會全局唯一:

          生成的代碼結構

          css modules確實解決了局部作用域的問題,也是很多人喜歡在React中使用的一種方案。

          但是這種方案也有自己的缺陷:

          • 引用的類名,不能使用連接符(.home-title),在JavaScript中是不識別的;
          • 所有的className都必須使用{style.className} 的形式來編寫;
          • 不方便動態來修改某些樣式,依然需要使用內聯樣式的方式;

          如果你覺得上面的缺陷還算OK,那么你在開發中完全可以選擇使用css modules來編寫,并且也是在React中很受歡迎的一種方式。

          二. CSS in JS

          2.1. 認識CSS in JS

          實際上,官方文檔也有提到過CSS in JS這種方案:

          • “CSS-in-JS” 是指一種模式,其中 CSS 由 JavaScript 生成而不是在外部文件中定義;
          • 注意此功能并不是 React 的一部分,而是由第三方庫提供。 React 對樣式如何定義并沒有明確態度;

          在傳統的前端開發中,我們通常會將結構(HTML)、樣式(CSS)、邏輯(JavaScript)進行分離。

          • 但是在前面的學習中,我們就提到過,React的思想中認為邏輯本身和UI是無法分離的,所以才會有了JSX的語法。
          • 樣式呢?樣式也是屬于UI的一部分;
          • 事實上CSS-in-JS的模式就是一種將樣式(CSS)也寫入到JavaScript中的方式,并且可以方便的使用JavaScript的狀態;
          • 所以React有被人稱之為 All in JS;

          當然,這種開發的方式也受到了很多的批評:

          • Stop using CSS in JavaScript for web development
          • https://hackernoon.com/stop-using-css-in-javascript-for-web-development-fa32fb873dcc

          批評聲音雖然有,但是在我們看來很多優秀的CSS-in-JS的庫依然非常強大、方便:

          • CSS-in-JS通過JavaScript來為CSS賦予一些能力,包括類似于CSS預處理器一樣的樣式嵌套、函數定義、邏輯復用、動態修改狀態等等;
          • 依然CSS預處理器也具備某些能力,但是獲取動態狀態依然是一個不好處理的點;
          • 所以,目前可以說CSS-in-JS是React編寫CSS最為受歡迎的一種解決方案;

          目前比較流行的CSS-in-JS的庫有哪些呢?

          • styled-components
          • emotion
          • glamorous

          目前可以說styled-components依然是社區最流行的CSS-in-JS庫,所以我們以styled-components的講解為主;

          安裝styled-components:

          yarn add styled-components

          2.2. styled-components

          2.2.1. 標簽模板字符串

          ES6中增加了模板字符串的語法,這個對于很多人來說都會使用。

          但是模板字符串還有另外一種用法:標簽模板字符串(Tagged Template Literals)。

          我們一起來看一個普通的JavaScript的函數:

          function foo(...args) {
            console.log(args);
          }
          
          foo("Hello World");

          正常情況下,我們都是通過 函數名() 方式來進行調用的,其實函數還有另外一種調用方式:

          foo`Hello World`; // [["Hello World"]]

          如果我們在調用的時候插入其他的變量:

          • 模板字符串被拆分了;
          • 第一個元素是數組,是被模塊字符串拆分的字符串組合;
          • 后面的元素是一個個模塊字符串傳入的內容;
          foo`Hello ${name}`; // [["Hello ", ""], "kobe"];

          在styled component中,就是通過這種方式來解析模塊字符串,最終生成我們想要的樣式的

          2.2.2. styled基本使用

          styled-components的本質是通過函數的調用,最終創建出一個組件:

          • 這個組件會被自動添加上一個不重復的class;
          • styled-components會給該class添加相關的樣式;

          比如我們正常開發出來的Home組件是這樣的格式:

          <div>
            <h2>我是Home標題</h2>
            <ul>
              <li>我是列表1</li>
              <li>我是列表2</li>
              <li>我是列表3</li>
            </ul>
          </div>

          我們希望給外層的div添加一個特殊的class,并且添加相關的樣式:

          styled-components基本使用

          另外,它支持類似于CSS預處理器一樣的樣式嵌套:

          • 支持直接子代選擇器或后代選擇器,并且直接編寫樣式;
          • 可以通過&符號獲取當前元素;
          • 直接偽類選擇器、偽元素等;
          const HomeWrapper = styled.div`
            color: purple;
          
            h2 {
              font-size: 50px;
            }
          
            ul > li {
              color: orange;
          
              &.active {
                color: red;
              }
          
              &:hover {
                background: #aaa;
              }
          
              &::after {
                content: "abc"
              }
            }
          `

          最終效果如下

          2.2.3. props、attrs屬性

          props可以穿透

          定義一個styled組件:

          const HYInput = styled.input`
            border-color: red;
          
            &:focus {
              outline-color: orange;
            }
          `

          使用styled的組件:

          <HYInput type="password"/>

          props可以被傳遞給styled組件

          <HomeWrapper color="blue">
          </HomeWrapper>

          使用時可以獲取到傳入的color:

          • 獲取props需要通過${}傳入一個插值函數,props會作為該函數的參數;
          • 這種方式可以有效的解決動態樣式的問題;
          const HomeWrapper = styled.div`
            color: ${props => props.color};
          }

          添加attrs屬性

          const HYInput = styled.input.attrs({
            placeholder: "請填寫密碼",
            paddingLeft: props => props.left || "5px"
          })`
            border-color: red;
            padding-left: ${props => props.paddingLeft};
          
            &:focus {
              outline-color: orange;
            }
          `

          2.2.4. styled高級特性

          支持樣式的繼承

          編寫styled組件

          const HYButton = styled.button`
            padding: 8px 30px;
            border-radius: 5px;
          `
          
          const HYWarnButton = styled(HYButton)`
            background-color: red;
            color: #fff;
          `
          
          const HYPrimaryButton = styled(HYButton)`
            background-color: green;
            color: #fff;
          `

          按鈕的使用

          <HYButton>我是普通按鈕</HYButton>
          <HYWarnButton>我是警告按鈕</HYWarnButton>
          <HYPrimaryButton>我是主要按鈕</HYPrimaryButton>

          styled設置主題

          在全局定制自己的主題,通過Provider進行共享:

          import { ThemeProvider } from 'styled-components';
          
          <ThemeProvider theme={{color: "red", fontSize: "30px"}}>
            <Home />
            <Profile />
          </ThemeProvider>

          在styled組件中可以獲取到主題的內容:

          const ProfileWrapper = styled.div`
            color: ${props => props.theme.color};
            font-size: ${props => props.theme.fontSize};
          `

          2.3. classnames

          vue中添加class

          在vue中給一個元素添加動態的class是一件非常簡單的事情:

          你可以通過傳入一個對象:

          <div
            class="static"
            v-bind:class="{ active: isActive, 'text-danger': hasError }"
          ></div>

          你也可以傳入一個數組:

          <div v-bind:class="[activeClass, errorClass]"></div>

          甚至是對象和數組混合使用:

          <div v-bind:class="[{ active: isActive }, errorClass]"></div>

          react中添加class

          React在JSX給了我們開發者足夠多的靈活性,你可以像編寫JavaScript代碼一樣,通過一些邏輯來決定是否添加某些class:

          import React, { PureComponent } from 'react'
          
          export default class App extends PureComponent {
            constructor(props) {
              super(props);
          
              this.state = {
                isActive: true
              }
            }
          
            render() {
              const {isActive} = this.state; 
          
              return (
                <div>
                  <h2 className={"title " + (isActive ? "active": "")}>我是標題</h2>
                  <h2 className={["title", (isActive ? "active": "")].join(" ")}>我是標題</h2>
                </div>
              )
            }
          }
          

          這個時候我們可以借助于一個第三方的庫:classnames

          • 很明顯,這是一個用于動態添加classnames的一個庫。

          我們來使用一下最常見的使用案例:

          classNames('foo', 'bar'); // => 'foo bar'
          classNames('foo', { bar: true }); // => 'foo bar'
          classNames({ 'foo-bar': true }); // => 'foo-bar'
          classNames({ 'foo-bar': false }); // => ''
          classNames({ foo: true }, { bar: true }); // => 'foo bar'
          classNames({ foo: true, bar: true }); // => 'foo bar'
          
          // lots of arguments of various types
          classNames('foo', { bar: true, duck: false }, 'baz', { quux: true }); // => 'foo bar baz quux'
          
          // other falsy values are just ignored
          classNames(null, false, 'bar', undefined, 0, 1, { baz: null }, ''); // => 'bar 1'

          我是@半糖學前端 ,專注前端技術領域分享,關注我和我一起學習,共同進步!

           React JS是一個功能強大的通用庫,使開發人員能夠構建復雜的web應用程序。遵循最佳實踐對于編寫可維護和可伸縮的React應用程序至關重要。對React 感興趣的同學,可以參加Web前端培訓,你可以學到更全面的知識和技能,提高應用開發工作效率。

            文件夾結構

            一個組織良好的文件夾結構可以在開發過程中產生顯著的差異。將相關的組件、樣式和實用程序分組在一起,可以更容易地查找和更新代碼。

            DRY原則(不要重復)

            DRY原則主張避免代碼重復。在React中,開發人員應該盡可能地重用組件和邏輯。

            無狀態功能組件

            無狀態功能組件,也稱為功能組件或表示組件,是React中推薦的最佳實踐。這些組件不維護狀態,只通過props接收數據。通過使用無狀態的功能組件,代碼變得更加模塊化,也更容易測試。

            使用PropTypes

            PropTypes是一個幫助對傳遞給組件的屬性進行類型檢查的庫。通過指定預期的數據類型以及是否需要某些屬性,開發人員可以發現錯誤并確保組件接收到正確的數據。

            React中的高級樣式

            樣式是創建吸引人的用戶界面的一個重要方面。React提供了各種樣式化組件的方法。在web前端培訓學習中,有很多關于React 的課程學習,有一些實操項目的訓練,可以幫助你將學到的理論知識應用到實踐中去,真正掌握React 的使用。

            CSS模塊

            CSS模塊允許開發人員在他們的組件中編寫模塊化和限定范圍的CSS。組件中定義的CSS規則僅適用于該特定組件,以防止意外的樣式沖突。CSS模塊增強了代碼的可維護性,并使得在大型應用程序中管理樣式變得更加容易。

            樣式組件

            樣式組件是一個流行的庫,它使開發人員能夠直接在他們的JavaScript代碼中編寫CSS。它使用帶標簽的模板文字來創建樣式化組件。樣式組件提供了一種更加動態和靈活的樣式化方法,使得基于屬性和狀態管理組件樣式變得更加容易。

            

            反應狀態管理

            隨著React應用程序變得越來越復雜,跨多個組件管理狀態變得越來越具有挑戰性。狀態管理庫可以幫助解決這個問題。

            Redux

            Redux是一個可預測的狀態管理庫,遵循Flux架構。它將應用程序的狀態集中在一個存儲中,并允許組件使用reducers和actions來訪問和修改狀態。Redux提供了清晰的關注點分離,簡化了大型應用程序中的數據流。通過web前端培訓,React 課程緊跟企業需求和市場需求,可以讓你學到最新的知識和技能,提高自身競爭力。

            MobX

            MobX是另一個流行的狀態管理庫,它為管理狀態提供了一種更加靈活和反應性更強的方法。它自動跟蹤可觀察對象之間的依賴關系,并在狀態改變時更新組件。MobX以其簡單性和易于與React應用程序集成而聞名。

            帶React的服務器端渲染(SSR)

            服務器端呈現是一種用于在將React應用程序發送到客戶端之前在服務器上呈現該應用程序的技術。這通過向搜索引擎提供完全呈現的HTML內容,改善了初始加載時間并增強了SEO。可以使用Next.js這樣的庫來實現SSR,這簡化了React應用中實現服務器端渲染的過程。

            React安全最佳實踐

            Web應用安全對于保護用戶數據和防止攻擊至關重要。React開發人員應該遵循這些最佳實踐:

            XSS預防

            XSS是一種常見的安全漏洞,使得攻擊者能夠將惡意腳本注入網頁。開發人員可以通過適當地凈化用戶輸入和使用像DOMPurify這樣的庫來凈化HTML來防止XSS攻擊。React是前端常用的一個框架,想要學會這個框架的使用技能,建議報名參加Web前端培訓,可以在短時間內獲得較大提升。

            CSRF保護

            跨站點請求偽造(CSRF)是另一種安全威脅,它涉及攻擊者誘騙用戶在不知情的情況下在網站上執行操作。為了抵御CSRF攻擊,開發人員應該使用CSRF令牌并實施嚴格的CORS策略。

            React的未來

            React還在繼續發展,它的未來看起來很有希望。一些值得關注的趨勢和發展包括:

            反應并發模式:并發模式是一個即將到來的特性,它將允許React以一種更加漸進和可中斷的方式執行呈現。這將帶來更流暢的用戶體驗,尤其是對于具有復雜ui的應用程序。

            React服務器組件:服務器組件旨在將服務器端渲染提升到一個新的水平。它們將允許開發人員將組件渲染卸載到服務器,從而加快加載速度。

            改進的反應性能:React團隊一直致力于優化React的性能,使其更快、更高效。

            結論

            通過遵循最佳實踐,開發人員可以創建可伸縮、可維護、高性能的React應用程序,提供卓越的用戶體驗。在Web前端培訓中,也有關于React的學習和使用,理論知識結合實戰操作,學以致用,真正掌握前端技術。


          主站蜘蛛池模板: 精品久久国产一区二区三区香蕉 | 无码人妻精品一区二区蜜桃| 国产一区二区三区91| 香蕉免费一区二区三区| 国产精品自拍一区| 狠狠综合久久AV一区二区三区 | 色窝窝免费一区二区三区| 国产免费一区二区三区不卡| 日韩在线视频一区二区三区| 91久久精品一区二区| 国产日韩高清一区二区三区| 成人无号精品一区二区三区| 亚洲一区免费在线观看| 亚洲老妈激情一区二区三区| 国产精品亚洲一区二区三区在线观看| 麻豆一区二区在我观看| 免费日本一区二区| 国模吧一区二区三区| 国产激情一区二区三区 | 免费无码一区二区| 国产伦一区二区三区免费| 日韩精品人妻一区二区三区四区| 78成人精品电影在线播放日韩精品电影一区亚洲 | 天堂一区人妻无码| 亚洲高清一区二区三区电影 | 色狠狠色噜噜Av天堂一区| 精品国产一区二区22| 一区二区三区www| www.亚洲一区| 91福利国产在线观看一区二区| 亚洲国产精品一区二区第四页| 日本在线观看一区二区三区| 精品一区二区三区无码视频| 国产精品久久亚洲一区二区| 国产免费私拍一区二区三区| 麻豆AV一区二区三区久久| 国产AV午夜精品一区二区入口| 色欲精品国产一区二区三区AV| 少妇特黄A一区二区三区| 亚洲一区二区三区免费视频| 亚洲欧洲无码一区二区三区|