2025年10月8日 星期三

筆記 JavaScript 工程師養成直播班 第五堂

1.認識DOM(Documnet Object Model)標籤
documnet
Elemnet : <a></a>  
Attribute : "href"
Text : <a>mylink</a> (mylink)
2.網頁解析由上而下
<script>javascript 語法</script>
JS建議放於網頁下面等DOM解析完成使用才不會有問題
3.querySelector(選取第一個符合元素)(沒符合null)
    <h1 class="header">1234</h1>     
    <script>        
        const el = document.querySelector('.header');        
        console.log(el);//<h1 class="header">1234</h1>
    </script>
    
    <div class="targetBElementP">
 	 <p>請選取我</p>
    </div>    
    <script> 
    	//取得child
    	const targetBElementP = document.querySelector(".targetBElementP > p");
    </script>
    
    //以下較舊可不使用
    getElementsByClassName('.class');
    getElementsByTagName('tag');
    getElementById('#id');
4.元素加入HTML或文字(innerHTML刪除內容後再加入)
    <main>123</main>
    <script>
       const main =  document.querySelector('main');
       main.innerHTML =`<h1>546</h1>`;//加入html標籤
       const h1 = document.querySelector('h1');
       console.log(h1);//<h1>456</h1>
    </script>
5.元素插入html或文字(prepend、append、appendChild)
    <ul>
        <li>hihi</li>
    </ul>
    <script>
        const ul = document.querySelector('ul');         
        const liappendChild = document.createElement('li');
        liappendChild.textContent = "我是appendChild加入的我會新增在後面";
        ul.appendChild(liappendChild);
        const liprepend = document.createElement('li');
        liprepend.textContent = "我是prepend加入的我會新增在最前面";
        ul.prepend(liprepend);
         const liappend = document.createElement('li');
        liappend.textContent = "我是aappend加入的我會新增在後面";
        ul.append(liappend);
    </script>
6.innerHTML、textContent差異
    <main></main>
    <script>
       const main =  document.querySelector('main');
       main.innerHTML =`<h1>123</h1>`;//html標籤
       main.textContent=`<h1>123</h1>`;//會是文字
    </script>
7.setAttribute加入屬性,getAttribute取得屬性,innerHTML取得html,textContent取得文字
    <a></a>
    <script>
        const myLink = document.querySelector('a');
        myLink.innerHTML = "<span>Google</sapn>";
        //設定Attribute
        myLink.setAttribute("href", "https://www.google.com");
        myLink.setAttribute("target", "_blank");
        //取出設定Attribute
        console.log(myLink.getAttribute("href"));//https://www.google.com
        console.log(myLink.getAttribute("target"));//_blank
        console.log(myLink.innerHTML);//<span>Google</span>
        console.log(myLink.textContent);//google
    </script>
8.querySelectorAll,回傳NodeList陣列(沒符合null)
    <a>Google</a>
    <a>Yahoo</a>
    <script>
        const myLinks = document.querySelectorAll('a');//會回傳NodeList陣列
        console.log(myLinks);
        myLinks[0].setAttribute("href", "https://www.google.com");
        myLinks[1].setAttribute("href", "https://tw.yahoo.com");
    </script>
9.表單元素取值、賦值
    <input type="text" class="txt" value="早安" />
    <select class="list">
        <option value="1">1</option>
        <option value="2">2</option>
    </select>
    <script>
        const txt = document.querySelector('.txt');
        console.log(txt.value);//早安
        txt.value = "晚安"; //賦值
        console.log(txt.value);//晚安

        const list = document.querySelector('.list');
        console.log(list);//<select class="list"><option value="1">1</option><option value="2">2</option></select>
        console.log(list.value);//1
        list.value = 2; //賦值
        console.log(list.value);//2
    </script>
10.addEventListener註冊監聽事件
是否有註冊監聽,chrome > F12 > 元素上檢查 > Even Listeners
    <ul class="list">
        <li><span>hihi</span></li>
        <li>hihi <input type="button" value="按鈕" class="btn"></li>
    </ul>
    <h1></h1>
    <script>
        const btn = document.querySelector('.list');
        //const btn = document.querySelector('.btn');        
        const h1 = document.querySelector('h1');
        let count = 0;
        btn.addEventListener('click', function (e) {
            if (e.target.nodeName == "INPUT") {
                //btn.addEventListener('click', function (e) {
                count++;
                h1.textContent = `手速測試,您點擊了${count}次`;
            } else {
                console.log(e);//捕捉當下元素資訊
                console.log(e.clientX);
                console.log(btn.nodeName);//INPUT 目前的元素tag
                console.log(e.target);//偵測到目前點擊是哪個元素
                console.log(e.target.nodeName);//INPUT          
                console.log(e.target.innerHTML);
                console.log(e.target.textContent);
                h1.textContent = `點到${e.target.nodeName}`;
            }
        });
    </script>
11.preventDefault取消預設觸發行為
    <a href="http://tw.yahoo.com">yahoo</a>
    <script>
        const myLink = document.querySelector('a');
        myLink.addEventListener('click', function (e) {
            e.preventDefault();
            console.log('有點點到,但不會轉址');
        });
    </script>
參考資料
六角學院直播課
你需要注意的 console.log 問題

2025年10月3日 星期五

筆記 JavaScript 工程師養成直播班 第四堂

1.函式(function)宣告方式及用法
//函式屬於物件型別
//程式碼重複使用
function 函式名稱(參數){
	//要執行的程式碼
}
函式名稱(參數);
2.執行順序
happy();
holiday();
先執行happy()程式碼法,後再執行holiday()內程式碼
3.函式包函式順序
        function first() {
            console.log('first');
            third();
        };
        function second() {
            console.log('second');
        };
        function third() {
            console.log('third');
        };

        first();
        second();
        third();

        //  first
        //  third
        //  second
        //  third
4.函式帶入參數,只會在大括號裡面使用,執行完就消失
        function callNum(num) {
            console.log(`呼叫${num}號`)
        }
        callNum(5); // 呼叫5號
        console.log(`呼叫${num}號`); // num is not defined
5.函式可帶入多個參數
        function addNum(num1, num2) {
            console.log(num1 + num2);//3
        }
        addNum(1, 2);
6.return可回傳值
        function addNum(num1, num2) {
            return num1 + num2; 
        }
        const result = addNum(1, 2);
        console.log(result);//3
7.return 會中斷函式
        function addNum(num1, num2) {
            console.log(1);//1
            return num1 + num2;
            console.log(2);//沒跑
        }
        const result = addNum(1, 2);
        console.log(result);//3
8.return 多個值,回傳array或物件
        function addNum(num1, num2) {
            return [num1 , num2];
        }
        const result = addNum(1, 2);
        console.log(result); //[1,2]
9.函式種類
        console.log(numA(3));
        //函式陳述式(不管放在哪裡都可以執行)
        function numA(x) {
            return x * x;
        }

        //函式表達式
        //console.log(numB(3)); //變數numB賦值前就使用,無法讀取該變數
        const numB = function (x) {
            return x * x;
        }
        console.log(numB(3)); //必須在賦值後才能使用

        //箭頭函式       
        //函式表達式(function (x))、箭頭函式((x) =>)一樣的
        const numC = (x) => {
            return x * x;
        }
        console.log(numC(3));

        //箭頭函式更精簡寫法
        //必須有retrun,大括號及return可不寫
        //只有一個參數時可省略(x)=>變成x =>
        //如果沒有參數時寫()=>
        const numD = (x) => x * x;
        console.log(numD(3));
參考資料
六角學院直播課

2025年10月1日 星期三

筆記 JavaScript 工程師養成直播班 第三堂

1.陣列 (物件型別)
        //[]陣列
        //只有值,可包任何型別
        //取值用索引,順序很重要因為要知道第幾個才能取
        const colors = ["yellow", "red", "blue"];
        const any = [123, true, "Tom"];//可混合 
        //length 長度
        console.log(`colors陣列共用${colors.length}筆`);
        //讀取陣列,陣列從從0開始算 
        let myColor = colors[2];
        console.log(myColor); // "blue"
        myColor = colors[3]; //陣列從0開始 
        console.log(myColor); // undefined
 
        //陣列資料應用
        let colors = [];
        colors[0] = "blue";
        colors[1] = "yellow";
        colors[3] = "red";
        console.log(colors);//["blue","yellow", null,"red"]
        console.log(`colors陣列共用${colors.length}筆`); //colors陣列共用4筆       

        //unshift 加入第一筆
        colors.unshift("green");
        console.log(colors);//["geeen","blue","yellow",null,"red"];

        //push 加入最後一筆
        colors.push("black");
        console.log(colors);//["geeen","blue","yellow",null,"red","black"];        

        //pop 刪除第一筆
        colors.shift();
        console.log(colors);//["blue","yellow",null,"red","black"];

        //pop 刪除最後一筆
        colors.pop();
        console.log(colors);//["blue","yellow",null,"red"];

        //splice 刪除指定資料
        //splice(1 , 2) splice(起始位置(陣列從0開始) , 2(往後刪除幾筆)) 
        colors.splice(1, 2);
        console.log(colors);//["blue","red"];    

        //splice 插入指定資料 第二參數為0
        colors.splice(1, 0, "gold");
        console.log(colors);//["blue","gold","red"]; 

        //splice 修改指定資料 第二參數為1
        colors.splice(1, 1, "white");
        console.log(colors);//["blue","white","red"]; 

        const data = [1, 3, 9, 5, 7, 9];
        //map() 方法會建立一個新的陣列(不影響原始資料)
        const arr1 = data.map(x => x * x);
        console.log(arr1);//[1,9,81,25,49,81]

        //forEach() 不會回傳值
        data.forEach(function(item,index,array){
            //item 目前資料
            //index 目前索引
            //array 目前所有陣列
            console.log(item,index,array);
        });
        const arr2 = [];
        data.forEach(x => { arr2.push(x * x); });
        console.log(arr2);//[1,9,81,25,49,81]

        //filter() 篩選出符合條件回傳新的陣列(不影響原始資料),查無空陣列
        const arr3 = data.filter(x => x >= 5);
        console.log(arr3);//[9,5,7,9]

        //find() 由前往後符合的第一筆,查無undefined
        const obj4 = data.find(x => x >= 5);
        console.log(obj4);//9 

        //indexOf 由前往後符合的第一筆,-1查無
        const i5 = data.indexOf(9);
        console.log(i5);//2 [1 3 9這筆, 5, 7, 9]

        //lastIndexO 由後往前符合的第一筆,-1查無
        const i6 = data.lastIndexOf(9);
        console.log(i6);//5 [1, 3, 9, 5, 7, 9這筆]

        //reduce() 方法將一個累加器及陣列中每項元素(由左至右),將陣列化為單一值。
        const i7 = data.reduce((accumulator, x) => {
            return accumulator + x;
        }, 0); //'0' 是累加器的初始值
        console.log(i7);//34
        
        //sort() 排序
        //reverse() 反排序        
        //join() 變字串     
        //some() 一個值符合條件回傳true
        //every() 陣列完全符合條件true   
        //slice() 淺拷貝至新物件
        //concat() 合併
2.物件 (物件型別)
        //物件{}
        //屬性:值
        //取值用屬性,順序不重要只要知道屬性就能取值
        const family = {
            myFather: "David",//屬性 : 值
            myMonther: "Mary",//屬性 : 值
            dogs: 3
        };
        console.log(family.myFather); //讀取物件中屬性
 
        //物件資料應用
        let home = {};
        //新增、修改        
        //點記法 (Dot notation)
        home.myMonther = "May";
        home.myFahter = "Kevin";
        home.cats = 4;
        console.log(home);  //{"myMonther": "May","myFahter": "Kevin", "cats": 4}
        home.cats += 1;
        home.myMonther = "Tom";
        console.log(home);  //{"myMonther": "Tom","myFahter": "Kevin", "cats": 5}
        //刪除
        delete home.cats;
        console.log(home);  //{"myMonther": "Tom","myFahter": "Kevin"}
        console.log(home.cats); //undefined
        //讀取方式
        //括弧記法 (Bracket notation),屬性特殊字元時必須使用
        let f = "001";//特殊開頭為數字時
        home[f] = "1234"       
        console.log(home[f]);//"Kevin"
3.JSON(Javascript Object Notaion)(JS物件表示法)
1.屬性都是字串 "data" : [] ;
2.沒辦法放函式
3.不能註解
4.最後一個值後面不能加入逗號
5.目前前後端常用資料傳遞格式
4.補充
陣列第幾筆用[]中間數字
物件找值用.屬性
5.chrome擴充套件
JSONView
參考資料
六角學院直播課

2025年9月29日 星期一

未分類 威力導演365無法匯出

直接點選.pds副檔名開啟專案後,點選匯出都沒反應,網路找了解決方式
1.檔案 > 開新專案
2.將要使用的影音檔都拉進媒體櫃如下圖
3.如果出現下列錯誤的話,整個軟體關掉或電腦重開,從1開始重作,如果沒錯就直接跳4
4.檔案 > 開啟專案 > 選擇您的.pds
參考網址:
Cyberlink PowerDirector 2025 不讓你匯出影片

2025年9月26日 星期五

筆記 JavaScript 工程師養成直播班 第二堂

1.比較運算子
>(大於)
>=(大於等於)
==(等於)
<=(小於等於)
<(小於)
!=(不等於)
===(嚴格等於型,別跟值完全一樣)
!==(嚴格不等於,型別跟值有一個不同為true)
2.邏輯運算子
&& 且(and)
|| 或(or)
! 不是(not)
3.邏輯判斷
if(){
}else if(){
}else{
}
4.三元運算
condition ? exprIfTrue : exprIfFalse
var age = 26;
var beverage = age >= 21 ? "Beer" : "Juice";
console.log(beverage); // "Beer"
參考資料
六角學院直播課
條件運算子

2025年9月24日 星期三

筆記 JavaScript 工程師養成直播班 第一堂

1.let const var
作用區域 重複宣告 重新賦值 變數提升
var 函式作用域
let 區塊作用域 不可
const 區塊作用域 不可 不可
1.const實際上是指到記憶體位址,不能改變的是記憶體位址
2.重新賦值會改變記憶體位址,這樣就不行
3.但可以改值
 const color = "yellow";
//color ="red"; 重新賦值不行
console.log(color);

const colors = ["yellow", "blue", "red"];
colors[0] = "green";//改值可以
console.log(colors);
AI 摘要

「變數提升」(Hoisting)是指在編譯階段,
JavaScript 引擎會將 var 宣告的變數提升(移動)到其作用域的頂端,
但只提升宣告本身,不會執行初始化(賦值)動作。 
因此,在變數實際被賦值之前呼叫它,值會是 undefined,而不是執行時期報錯。

函式作用域(Function Scope)指的是變數的可存取範圍被限制在某個函式內部,
僅在該函式執行時有效。 在JavaScript 中,
使用 var 關鍵字宣告的變數就具有函式作用域的特性。 
這表示在函式外部宣告的變數是全域的,而函式內部的變數則被限制在該函式內部,
無法在外部存取。 
2.typeof(用來顯示型別)
        let a = 1 ;
        console.log(typeof a); //number
        let b = "哈" ;
        console.log(typeof b);  //string
3.數字 number (原始型別),可用typeof === 或是 NaN(Not a Number)
        let a = 0;
        a = a + 50 ;
        a += 50 ; //等同於上方算式
        let a = 0 ;
        a += 1;
        a ++ ; //等同於上方算式
        //直播:後綴++ -- ** 運算後做
        let x = 3;
        let y  = x++; //先給y值後再運算x=x+1
        //x = 4 , y = 3
        //直播:前綴++ -- ** 運算先做
        let a = 2;
        let b  = ++a; //先運算a=2+1後再給b值
        //a = 3 , b = 3
4.字串 string (原始型別)
        let s1 = 's1' ; //單引號
        let s2 = "s2" ; //雙引號
        let go = "let's go"; //基本上一樣,看需求使用
        let name = "Marco" ;
        let content = "Hello";
        console.log(name + content);//字串相加
        let name = " Maroco ";
        console.log(name.length); //字串長度
        name =  name.trim(); //濾掉前後空白
        console.log(name.length);
        let name = "Maroco";
        let age = 19;
        console.log(`您好我叫${name},今年${age}歲`);
        let a = 1 ;
        let b = "哈" ;
        let c =  a + b ;
        console.log(c); // 1哈
        console.log(typeof c); //字串跟數字相加會變成字串 
        let a = 1 ;
        let b = "哈" ;
        let d = a * b ; 
        console.log( d);//NaN 非數字進行運算 
        console.log(typeof d);// number
5.布林 (原始型別)
        let is = 2 > 3; // ture or false
        console.log(is); // false
        console.log(typeof is); // boolean
6.undefined 尚未被賦於值 (原始型別)
        let u;
        console.log(u); // undefined 
        console.log(typeof u); // undefined 
7.null 有被賦於值,後清空,(直播:確定未來有值,但還沒確定) (原始型別)
        let n = [];//內容假裝很多
        n = null;//清空記憶體
8.字串轉文字parseInt、parseFloat
        let s1 = "哈哈";  
        s1 = parseInt(s1);
        console.log(s1); // NaN  
        let s2 = "123"; //從表單抓取資料都是字串所以要轉型
        s2 = parseInt(s2); //parseFloat()有小數點
        console.log(s2); // 123
9.數字轉字串
        let s3 = 123;  
        s3 = s3.toString();
        console.log(s3); // 123  
        console.log(s3 + 9); // 1239 字串+數字= 字串
        console.log(typeof s3) //string 
10.直播補充
1.基本型別"傳值":將原始值複製一份,放到新的記憶體上給新變數用
2.物件型別"傳址":將原變數參考的記憶體位置給到新變數,所以被傳的有修改原來的也會變更
參考資料
六角學院直播課
JS 宣告變數, var 與 let / const 差異

2025年7月9日 星期三

Git make sure you configure your 'user.name' and 'user.email' in git

VS Code Commit時出現的錯誤
make sure you configure your 'user.name' and 'user.email' in git
開啟終端機輸入以下指令
git config --global user.name "你git上面的名稱"
git config --global user.email 你git註冊的mail

2025年7月6日 星期日

筆記 網頁切版直播班

1.將容器設定成flex
<div class="container"></div>
.container{
  display: flex;
}
2.外層容器屬性
2-1 主軸 justify-content
justify-content: center; 
justify-content: flex-start;
justify-content: flex-end; 
justify-content: space-between;左右"不"留白等距
justify-content: space-around; 左右留白等距
2-2 主軸方向 flex-direction
flex-direction: row;
flex-direction: row-reverse;
flex-direction: column;
flex-direction: column-reverse;
2-3 主軸換行 flex-wrap
flex-wrap: nowrap;
flex-wrap: wrap;
flex-wrap: wrap-reverse;
2-4 交錯線 align-items
常用如下更多請看下方參考資料
align-items: flex-start;
align-items: flex-end;
align-items: center;
align-items: stretch;
補充容器內容分離,容器僅負責定位
補充搭配以下語法可減少計算失誤
*{
 box-sizing: border-box;
}

*,*::before,*::after {
    box-sizing: border-box;
}
3.如果為顯示類似購物車,可多一個col div來當容器
.col-1{
 width:calc(100%/12);
 padding-left:10px;
 padding-right:10px;
}

.col-2{
 width:calc(100%/12*2);
 padding-left:10px;
 padding-right:10px;
}

.col-12{
 width: 100%;
 padding-left:10px;
 padding-right:10px;
}
4.變數共用 + SCSS
css
:root {
    --text-green: #57A203;
}
.cgreen {
    color: var(--text-green);
}
scss  
$text-green: #57A203;

input : checked + span {
} // 點選物後方第一個元件套用 css

}

input : checked ~ span {
} // 點選物後方所有元件套用 css

.header{
   
  &-title{
    & 代表父元素
  }
}


5.手機板禁用X軸(下方左右卷軸),設定了固定的width就會產生此問題
6.max-width取代width,最好在最外層的container要設一下,解決補充5方法
1.如果父元素比較寬時,保持既有寬度
2.如果父元素比較窄時,依父元素寬度自動調整
7.Flex依比例調整寬度,下為左占2右邊占3
.left{
	flex:2;
}
.right{
	flex:3;
}
8.格線系統響應式小方法
@media screen and(max-width: 768px){	
	[class*="col-"]{
    	width:100%;
	}
}
9.權重
HTML 標籤:1 分
class 選擇器:10 分
ID 選擇器:100 分
inline style:1000 分
!important:10000 分

html body .container .box{22分}
.box.box.box{30分}
10.圖片改變大小時換圖
<picture>
  <!-- 當螢幕寬度少於992px時,替換圖片 -->
  <source srcset="./images/M2.png" media="(max-width: 992px)">
  <!-- 預設圖片,通常是桌面版本 -->
  <img src="./images/M1.png" alt="Logo">
</picture>
11.line-height
行高計算方式 = 文字大小 * 行高倍數(ex:font-size: 20px * line-height: 1.5 = 30px 行高)
12.background-image
background-image: 用來設定元素的背景圖片。最常見的用法是 url(),後面接圖片的路徑。
範例:
background-image: url('images/your-image.png');
background-repeat: 控制背景圖片是否重複。
space;四角。
no-repeat:圖片只顯示一次。
repeat:圖片在 X 和 Y 軸上重複 (預設值)。
repeat-x:圖片只在 X 軸上重複。
repeat-y:圖片只在 Y 軸上重複。
background-position: 設定背景圖片的位置。
可以使用關鍵字 (如 center, top right) 或座標值 (如 50% 50%, 10px 20px)。
background-size: 設定背景圖片的大小。
cover:圖片會盡可能地縮放以覆蓋整個背景區域,但可能會裁剪圖片一部分。
contain:圖片會盡可能地縮放以完全顯示在背景區域內,但可能會留下空白。
13.偽元素
 /* 用 ::before 在文字前面加東西 */
.class::before {
  content: "前面加";  
}

/* 用 ::after 在文字後面加東西 */
.class::after {
  content: "後面加";   
}
14.media query breakpooints
$grid-breakpoints: (
  xs: 0,
  sm: 576px,
  md: 768px,
  lg: 992px,
  xl: 1200px,
  xxl: 1400px
);
15.bootstrap常用英文
s => start (由左至右故 start 為左邊)
e => end (由左至右故 end 為右邊)
t => top
b => bottom
x => x 軸(左右)
y => y 軸(上下)
16.bootstrap $spacer
基礎值 $spacer 預設為 16px
1: $spacer * 0.25 = 4px
2: $spacer * 0.5 = 8px
3: $spacer = 16px
4: $spacer * 1.5 = 24px
5: $spacer * 3 = 48px

範例:
.mx-1 即為
margin-left: 4px; margin-right: 4px;
17.transform
1.以物件自身為基準
2.每個class一個
3.順序會影響結果
4.位置不會變
5.外層套用內層也會
18.bootstrap row col 兩種寫法
<div class="container">
  <div class="row">
    <div class="col-md-6">Column 1</div>
    <div class="col-md-6">Column 2</div>
  </div>
  <div class="row row-cols-lg-4">
    <div class="col">Column A</div>
    <div class="col">Column B</div>
    <div class="col">Column C</div>
    <div class="col">Column D</div>
  </div>
</div>
參考資料
六角學院直播課
flex
Meaning of relative weights
SASS ( CSS / SCSS ) 常見符號
AOS
swiperjs
animate css

2025年5月26日 星期一

未分類 Nas 對接電腦傳輸速度變慢

使用網路芳鄰時跑的速度很慢
1.檢查網路線是否接好
2.網路線品質cat?
3.先檢查Nas跟PC或筆電的網路速度
4.透過 Windows (SMB / CIFS) 傳輸檔案時速度緩慢,該如何解決?[網路芳鄰 (SMB)] 如何解決Windows 11無法使用SMB功能的問題?
5.通常會需要關閉SMB簽名要求,用管理員開啟Power Shell
Set-SmbClientConfiguration -RequireSecuritySignature $false
參考資料
透過 Windows (SMB / CIFS) 傳輸檔案時速度緩慢,該如何解決?
[網路芳鄰 (SMB)] 如何解決Windows 11無法使用SMB功能的問題?

2025年5月9日 星期五

Windows chkdsk

最近常遇到磁碟無法讀取或是USB隨身硬碟讀LAG很久
微軟有個命令chkdsk嘗試後不錯用記錄一下
chkdsk /f /r /x d:
/f	修正磁碟上的錯誤。 磁碟必須鎖定。 如果 chkdsk 無法鎖定磁碟機,則會出現一則訊息,詢問您是否要在下次重新啟動電腦時檢查磁碟機。
/r	找出損毀的磁區並復原可讀取的資訊。 磁碟必須鎖定。 /r 包含 /f 的功能,以及實體磁碟錯誤的額外分析。
/x	如有必要,強制磁碟區先卸除。 磁碟機的所有開啟控點都會失效。 /x 也包含 /f 的功能。
試過之後USB隨身硬碟問題解決了 參考資料
chkdsk

2025年4月22日 星期二

React class & style(3)

1.先清除index.css,換成
.parent{
    color:  rgb(147, 60, 229);
}

.child{
    color: rgb(232, 150, 27);
    background-color: rgb(234, 78, 11);
}

2.接著回到App.jsx加入class
const Child = () => {
  return (
    <>
      <h3 className="child">Child Component</h3>
    </>
  )
}

const App = () => {
  return (
    <>
      <h2 className="parent">App Component</h2>
      <Child />
      <Child />
    </>
  )
}
export default App
React的class必須寫成className
3.修改Child component加入inline styles
const Child = () => {
  return (
    <>
      <h3 className="child" style={{
        backgroundColor: '#BBFFFF'
      }}>Child Component</h3>
    </>
  )
}
原css中如有-則使用小駝峰(lower camel case)
inline styles優先度大於class
參考資料
Adding styles
React JS 19 Full Course 2025 | Build an App and Master React in 2 Hours

React Component(2)

React Component寫法有蠻多種的
以下是個人覺得比較簡潔的
1.將App.jsx內容先全部清除改成
const App = () => {
  return (   
      <h2>App Component</h2>   
  )
}
export default App
完成第一個Component了
2.接著新增一個Child Component
const Child = () => {
  return (
    <>
      <h3>Child Component</h3>
    </>
  )
}
3.在App Component中使用多個Child Component
const App = () => {
  return (
    <>
      <h2>App Component</h2>
      <Child />
      <Child />
    </>
  )
}
export default App
表示Component可重複使用
特別注意 Component第一個字為大寫
參考資料
Your First Component
React JS 19 Full Course 2025 | Build an App and Master React in 2 Hours

2025年4月21日 星期一

React VS Code + Vite + React開發(1)

React過去有幾個地方令人詬病,React 19改善了許多
目前在寫法上也改進了許多,本篇開始紀錄開發過程
開啟VS Code > Terminal
npm create vite@latest
Project name:
.(於目前開啟的資料夾)
Select a framework:
react(或輸入想要的名稱)
Select a variant:
javascript(或擅長的開發方式)
檢查一下package.json > dependencies > react 版本是不是19.0.0
npm install
npm run dev
點開網頁完成了第一次建立
如何建立發佈檔案
npm run build 
檔案會在dist下
參考資料
Build a React app from Scratch
React JS 19 Full Course 2025 | Build an App and Master React in 2 Hours

2025年4月14日 星期一

IIS At least one other site is using the same HTTPS binding and the binding is configured

一台Server IIS使用多網站憑證問題
At least one other site is using the same HTTPS binding and the binding is configured
解決方式
勾選Require Server Name Indication
中文版請參考下方參考資料
參考資料
IIS 多站台使用 HTTPS 憑證的設定方式

2025年4月1日 星期二

npm : 因為這個系統上已停用指令碼執行,所以無法載入

1.開啟PowerShell
2.執行
get-executionpolicy
3.如為Restricted執行
set-executionpolicy remotesigned
4.如有例外改執行
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
參考資料
VSCode 執行 npm install 失敗

2025年3月21日 星期五

SQL Server 無法修改強制執行密碼原則

新增SQL使用者時,強制密碼原則未勾選時錯誤
"The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON"
USE Master
GO
ALTER LOGIN UserName WITH PASSWORD = 'password'
GO
ALTER LOGIN UserName WITH
      CHECK_POLICY = OFF,
      CHECK_EXPIRATION = OFF;
參考資料
Can't Alter Login

2025年3月3日 星期一

SQL Server provider: Named Pipes Provider, error: 40

這問題新手時常遇到所以大概解法
1.開啟 Sql Server Configuation Manager,啟用具名管道
2.防火牆設定輸入規則1433 port
通常這樣就解決了,但我問題還是沒解決
後來詢問主機廠商才知道1433 port常被駭,所以主機商先鎖了,所以需要在Server上使用另一個Port
以下為解決方法
1.開啟 Sql Server Configuation Manager,修改TCP/IP > 改port > 重啟服務
2.防火牆設定輸入規則"自訂的"port
最後專案或程式碼修改連線字串
連線字串比較特別,例如自訂的port為9527,原"192.168.1.100",要改成"192.168.1.100,9527"

2024年11月20日 星期三

c# 台灣載具正規表達式

目前查了一下台灣載具規則如下
載具規則
1.總長度8碼
2.第一碼必為[/]
3.後七碼為[半形]數字[0-9]、英文大寫[A-Z]、符號[.][-][+]
以下為驗證,如有錯誤請告知
using System.Text.RegularExpressions;
 public static bool taiwancarrier(string input) {
    return  Regex.IsMatch(input, @"^/[0-9A-Z.+-]{7}$");
 }
 
參考資料
手機條碼、自然人憑證條碼與捐贈碼檢核規則
用 regular expression 驗證電子發票手機條碼格式 。E-invoice mobile barcode validator by regular expression.

2024年7月23日 星期二

Asp.net 404.15 - Not found

連結字串長度問題
修改web.confiog
<system.web>
  <httpRuntime maxQueryStringLength="102400" maxUrlLength="102400" />
</system.web>
<system.webServer>
 <security>
  <requestFiltering>
   <requestLimits maxUrl="102400" maxQueryString="102400" />
  </requestFiltering>
 </security>
</system.webServer>