Mark Ku's Blog

react 學習筆記

react 框架的成功關鍵

雙向挷定的問題

雙向挷定主要透過數據的改變,動態改變 UI ,應用程式越來大,大多數情況不需要雙向綁定,反而造成效能的消耗,數據也越來越不好控制。
Angular - AngularJs 雙單向數據,衍伸的問題太多,Angular 2 以後也採單向數據流。
Vue - 單向數據流框架,v-model 只是語法糖,用來減少 控制數據流向的代碼,讓用戶的操作可以通過單向的數據流向 更新到綁定值中,綁定值在通過更新渲染更新到頁面上。

單向渲染

數據和界面挷定,就好像一個函數,同樣的輸入參數,輸出同樣的組件。

虛擬dom

瀏覽器操作 dom 成本很高,js 模擬出 DOM 抽像層,用最小代價達成部份渲染更新。

虛擬DOM狀態改變、差異計算與瀏覽器DOM更新流程圖
虛擬DOM狀態改變、差異計算與瀏覽器DOM更新流程圖

元件化

一個應用是無數的元件我搭建,元件本身擁有著獨立、完整、自由組合特性,可以使

  • 一致性
  • 視覺風格統一
  • 有利程式開發協作

react xss

{html} => 在 jsx 模板中被渲染時,xss 相關字元,轉換成特殊字元轉成編碼字串,如果要渲染 Html,得透過 dangerouslySetInnerHTML ,但要小心使用。

import React from "react";
import logo from "./logo.svg";

import Robot from "Robot";
import "App.css";

function App() {
  let html = "<img alt='rebot' src='./images/GDZ.png'} />";
  let jsHack = "javascript: alert('123')";  

  let user = { name: "hannah </script><script>alert(1);//" };

  return (
    <div className="App">      

      <span dangerouslySetInnerHTML={{ __html: user.name }} />
      <a
        className="App-link"
        href="https://reactjs.org"
        target="_blank"
        rel="noopener noreferrer"
      >
        Learn Reactaa
      </a>
      {/* <Robot id="GDZ.png?set=set3" email="edaad" name="mark" /> */}
      <a href={jsHack}>JShACK</a>
      {html}
    </div>
  );
}

export default App;

react 引用 css 方法

1. 直接引入整個css 文件

import './index.css'
<div className="app" />

P.S.這樣匯入可能造成,全域 css 汙染

2. 在組件中寫css

import React from "react";

class Header extends React.Component {
	style1 = {
		background: 'red',
		height: '25px'
	};	
	 	
  render() {
    return (
		<div  style={this.style1}>		
			123
		</div>
    );
  }
}

export default Header;

3. css in js ( JSS 模快化引入 )

css in js 的特性是,最後渲染結果的 CssName 會是動態生成的,但好處是可以按使用需求使用 CSS 才引入使用。 宣告 css 模塊。

global.d.ts
declare module "*.module.css" {
    const classes: { [key: string]: string}
    export default classes
}

declare module "*.module.scss" {
    const classes: { [key: string]: string}
    export default classes
}
  
import style from './index'
<div className={styles.app}>

vscode 智能提示 css in Js 功能( 安裝 typescript css 模塊組件 )

npm install typescript-plugin-css-modules --save --dev

修改 tsconfig.json 設定檔,加入 plugins

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    ...
  
    "plugins": [
      {
        "name": "typescript-plugin-css-modules"
      }
    ]
    ...
	...
   "include": [
	"global.d.ts"
   ]
   ...
  },
}

加入 vs code 配置( .vscode\settings.json )

{
	"typescript.tsdk": "node_modules/typescript/lib",
	"typescript.enablePromptUseWorkspaceTsdk": true,
	"typescript.tsserver.pluginPaths": ["typescript-plugin-css-modules"]
}

此時 vs code 會提示,按下允許,重啟 vs code,就能擁有模塊的 css 模組的自動提示

VS Code 提示使用工作區 TypeScript 版本
VS Code 提示使用工作區 TypeScript 版本

自動提示功能

VS Code中CSS模組的自動提示選單 P.S. 從React 底層,發現,圖片格式及其他類型 react moudule 都預設宣告好了,直接引就好行了
VS Code 顯示 React SVG 模組宣告

作者

Mark Ku

擁有 10+ 年經驗的資深軟體工程師,現為 AI 應用 Builder,專注於大型平台架構與簡化複雜系統設計,從電商系統到訂閱與收費平台,結合 AI Agent、AI 整合與自動化開發,打造高效率且可持續演進的產品技術基礎。閱讀更多

覺得這篇有幫助?

作者做的免費工具、每日 Podcast 與電子報,都在這裡。

Mark Ku · 本文採用 CC BY 4.0 授權,轉載請註明作者並附上原文連結。

留言

訂閱電子報

訂閱後即時收到新文章通知,不錯過任何技術分享。

提交即表示同意接收電子報,隨時可

熱門文章

View all
Mark Ku
··603

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案
Mark Ku
··440

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南
Mark Ku
··323

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略
Mark Ku
··239

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1
Mark Ku
··222

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取
Mark Ku
··199

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調