<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>前端實作 on Yen&#39;s 實作筆記</title>
        <link>https://Yen-An.github.io/categories/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C/</link>
        <description>Recent content in 前端實作 on Yen&#39;s 實作筆記</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Mon, 08 Aug 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://Yen-An.github.io/categories/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>使用ESLint提高程式碼品質</title>
        <link>https://Yen-An.github.io/p/%E4%BD%BF%E7%94%A8eslint%E6%8F%90%E9%AB%98%E7%A8%8B%E5%BC%8F%E7%A2%BC%E5%93%81%E8%B3%AA/</link>
        <pubDate>Mon, 08 Aug 2022 00:00:00 +0000</pubDate>
        
        <guid>https://Yen-An.github.io/p/%E4%BD%BF%E7%94%A8eslint%E6%8F%90%E9%AB%98%E7%A8%8B%E5%BC%8F%E7%A2%BC%E5%93%81%E8%B3%AA/</guid>
        <description>&lt;h2 id=&#34;eslint可以做什麼&#34;&gt;ESLint可以做什麼？&lt;/h2&gt;
&lt;p&gt;檢查出語法錯誤：變數未經宣告、function未經定義、括號不成對等等&lt;/p&gt;
&lt;p&gt;將code格式化：如何縮排、單引號或雙引號、分號、space及tab的大小等等&lt;/p&gt;
&lt;p&gt;刪除多餘的程式碼：提醒刪除import但沒有使用的模組、空的function、變數宣告但未使用等等&lt;/p&gt;
&lt;p&gt;確保遵循最佳實踐：使用嚴格相等 &lt;code&gt;===&lt;/code&gt; 而非 &lt;code&gt;==&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;再搭配現在流行的-style-guide&#34;&gt;再搭配現在流行的 style guide：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/google/styleguide&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Google&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/airbnb/javascript&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Airbnb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/standard/standard&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Standard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;透過以上兩種工具的結合，可以確保自己的程式碼與團隊遵循的規則相符，&lt;/p&gt;
&lt;p&gt;一旦通過ESLint的代碼檢查，表示程式碼品質在一定的水準內。&lt;/p&gt;
&lt;h2 id=&#34;在專案中引入eslint套件&#34;&gt;在專案中引入ESLint套件&lt;/h2&gt;
&lt;p&gt;以下將會解說如何將vscode內的延伸模組Prettier與ESLint + Airbnb style guide做結合，&lt;/p&gt;
&lt;p&gt;目標是禁用ESLint的格式規則，因為我們只需要用他來檢查語法錯誤，&lt;/p&gt;
&lt;p&gt;並用Prettier格式化程式碼。&lt;/p&gt;
&lt;p&gt;在開始之前，記得要先安裝 &lt;a class=&#34;link&#34; href=&#34;https://github.com/npm/cli&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;npm&lt;/a&gt; 及 &lt;a class=&#34;link&#34; href=&#34;https://github.com/zkat/npx&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;npx&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&#34;配置方法&#34;&gt;配置方法&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;下載VScode的  &lt;a class=&#34;link&#34; href=&#34;https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ESLint&lt;/a&gt; 及 &lt;a class=&#34;link&#34; href=&#34;https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Prettier&lt;/a&gt; 延伸模組&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在我們的專案根目錄中安裝 ESLint 及 Prettier 套件&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm install -D eslint prettier&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝 &lt;a class=&#34;link&#34; href=&#34;https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Airbnb style guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npx install-peerdeps --dev eslint-config-airbnb&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝 &lt;a class=&#34;link&#34; href=&#34;https://github.com/prettier/eslint-config-prettier&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;eslint-config-prettier&lt;/a&gt;（禁用ESLint格式化）&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm install --save-dev eslint-config-prettier&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝 &lt;a class=&#34;link&#34; href=&#34;https://github.com/prettier/eslint-plugin-prettier&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;eslint-plugin-prettier&lt;/a&gt;（允許ESLint在我們寫程式時顯示格式錯誤）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install --save-dev eslint-plugin-prettier
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install --save-dev --save-exact prettier
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在專案根目錄建立檔案 .eslintrc ，內容如下：&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;extends&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;airbnb&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;prettier&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;plugins&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;prettier&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;rules&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;prettier/prettier&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;最後，在vscode內設定格式化的工具為Prettier就好了，&lt;/p&gt;
&lt;p&gt;設定的方式，可以在撰寫程式碼的地方，按右鍵&amp;raquo;格式化文件，&lt;/p&gt;
&lt;p&gt;這時候vscode會跳出你要選擇什麼延伸模組去格式化，&lt;/p&gt;
&lt;p&gt;在這邊選擇 Prettier 即可。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>前端實作系列-在React Project內串接第三方API</title>
        <link>https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/</link>
        <pubDate>Mon, 20 Jun 2022 00:00:00 +0000</pubDate>
        
        <guid>https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/</guid>
        <description>&lt;p&gt;很多時候我們會需要去串接第三方API，而我的習慣是，在真正去project call api之前，會用postman先測試過，那天心血來潮去試著call 政府的 open data ，用的是&lt;/p&gt;
&lt;p&gt;全國街道路名: &lt;a class=&#34;link&#34; href=&#34;https://od.moi.gov.tw/api/v1/rest/datastore/301000000A-000917-035&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://od.moi.gov.tw/api/v1/rest/datastore/301000000A-000917-035&lt;/a&gt; 的api，&lt;/p&gt;
&lt;p&gt;在postman的結果，很正常，&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620112657719.png&#34;
	width=&#34;1938&#34;
	height=&#34;1162&#34;
	srcset=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620112657719_hudfcaece3cdcab9a3e03b5d6468f155cf_165602_480x0_resize_box_3.png 480w, https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620112657719_hudfcaece3cdcab9a3e03b5d6468f155cf_165602_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;image-20220620112657719&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;166&#34;
		data-flex-basis=&#34;400px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;於是我在我的React Project寫下fetch&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://od.moi.gov.tw/api/v1/rest/datastore/301000000A-000917-035&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;結果出現了錯誤訊息，上面寫的要在我們發送請求時加上 &lt;code&gt;mode:&#39;no-cors&#39;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620113142449.png&#34;
	width=&#34;1232&#34;
	height=&#34;558&#34;
	srcset=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620113142449_hu2c6f653ff6b809c0195057296355fa48_240507_480x0_resize_box_3.png 480w, https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620113142449_hu2c6f653ff6b809c0195057296355fa48_240507_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;image-20220620113142449&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;220&#34;
		data-flex-basis=&#34;529px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;於是我加上了&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://od.moi.gov.tw/api/v1/rest/datastore/301000000A-000917-035&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;no-cors&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;But!!!!!人生就是這個BUT!!!!!!!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620113803587.png&#34;
	width=&#34;1200&#34;
	height=&#34;416&#34;
	srcset=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620113803587_hu98f2cb1f1fe303ea734543164366ac03_94406_480x0_resize_box_3.png 480w, https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620113803587_hu98f2cb1f1fe303ea734543164366ac03_94406_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;image-20220620113803587&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;288&#34;
		data-flex-basis=&#34;692px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;可以看到我的 Response 裡面有個 &lt;code&gt;type =&#39;opaque&#39;&lt;/code&gt;，關於這個錯誤大家可以上網查查，簡單來說，這是一個不透明的 response，我們是無法去取得裡面的資料，所以 body 裏面是 null，事實證明 &lt;code&gt;mode=&#39;no-cors&#39;&lt;/code&gt;  並不會讓事情成功的執行，&lt;/p&gt;
&lt;p&gt;我也有試過什麼setupProxy，依舊無法取得我想要的資料，&lt;/p&gt;
&lt;p&gt;就在想要放棄之際，我看到了一個東西，&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf/related?hl=en&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf/related?hl=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;這是google chrome的一個插件，可以允許跨域請求，&lt;/p&gt;
&lt;p&gt;我將他安裝在我的瀏覽器，並按下左下角的toggle on ，&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620120541439.png&#34;
	width=&#34;1084&#34;
	height=&#34;536&#34;
	srcset=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620120541439_hufbf586cc4357a17a141ab49b3d06d8f5_53056_480x0_resize_box_3.png 480w, https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620120541439_hufbf586cc4357a17a141ab49b3d06d8f5_53056_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;image-20220620120541439&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;202&#34;
		data-flex-basis=&#34;485px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;然後回到我的程式碼，將 &lt;code&gt;mode:&#39;no-cors&#39;&lt;/code&gt; 拿掉，再去到開發者工具看看這次回傳什麼，&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620120935256.png&#34;
	width=&#34;1186&#34;
	height=&#34;416&#34;
	srcset=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620120935256_hu2cd21e9b1b7ce1cfef5f432e5bc4bd6a_105744_480x0_resize_box_3.png 480w, https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620120935256_hu2cd21e9b1b7ce1cfef5f432e5bc4bd6a_105744_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;image-20220620120935256&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;285&#34;
		data-flex-basis=&#34;684px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;可以看到我的 Response type 已經是 cors，但body依舊怪怪的？沒有我要的data，&lt;/p&gt;
&lt;p&gt;接著我利用插件的 Test Cors來檢查我的瀏覽器到底可以接受怎樣的跨域請求，&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620121125924.png&#34;
	width=&#34;1166&#34;
	height=&#34;256&#34;
	srcset=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620121125924_hu90bc8a0de86a9794d10852ef929a071a_69970_480x0_resize_box_3.png 480w, https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620121125924_hu90bc8a0de86a9794d10852ef929a071a_69970_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;image-20220620121125924&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;455&#34;
		data-flex-basis=&#34;1093px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;可以看到我的fetch通通都是被拒絕的，但是，XMLHttpRequest的 GET &amp;amp; POST都是被允許的，&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620121206852.png&#34;
	width=&#34;970&#34;
	height=&#34;230&#34;
	srcset=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620121206852_hu3794587ba99c6d70122d3de148db7cf4_44590_480x0_resize_box_3.png 480w, https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620121206852_hu3794587ba99c6d70122d3de148db7cf4_44590_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;image-20220620121206852&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;421&#34;
		data-flex-basis=&#34;1012px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;於是我將我的 fetch 改成 axios，因為axios的請求格式就是 XMLHttpRequest，&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;axios&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://od.moi.gov.tw/api/v1/rest/datastore/301000000A-000917-035&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;讓我們再回到開發者工具看看，&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620121608868.png&#34;
	width=&#34;1144&#34;
	height=&#34;672&#34;
	srcset=&#34;https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620121608868_hu37076298df33fb71cb1f7b5ff7d37da1_251071_480x0_resize_box_3.png 480w, https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E5%9C%A8react-project%E5%85%A7%E4%B8%B2%E6%8E%A5%E7%AC%AC%E4%B8%89%E6%96%B9api/image-20220620121608868_hu37076298df33fb71cb1f7b5ff7d37da1_251071_1024x0_resize_box_3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;image-20220620121608868&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;170&#34;
		data-flex-basis=&#34;408px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;這次成功的回傳了api所提供的data!!!!!&lt;/p&gt;
&lt;p&gt;以上就是我在react project 直接去串接第三方api的辦法，供大家參考。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>前端實作系列-上傳圖片並預覽</title>
        <link>https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E4%B8%8A%E5%82%B3%E5%9C%96%E7%89%87%E4%B8%A6%E9%A0%90%E8%A6%BD/</link>
        <pubDate>Sat, 18 Jun 2022 00:00:00 +0000</pubDate>
        
        <guid>https://Yen-An.github.io/p/%E5%89%8D%E7%AB%AF%E5%AF%A6%E4%BD%9C%E7%B3%BB%E5%88%97-%E4%B8%8A%E5%82%B3%E5%9C%96%E7%89%87%E4%B8%A6%E9%A0%90%E8%A6%BD/</guid>
        <description>&lt;p&gt;很多前端工程師一定會使用到的功能：圖片上傳，並將圖片預覽在網頁畫面上，其實做法非常簡單&lt;/p&gt;
&lt;h2 id=&#34;說明&#34;&gt;說明&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;利用 &lt;code&gt;input type=&#39;file&#39;&lt;/code&gt; 去取讓使用者選取要上傳的圖片&lt;/li&gt;
&lt;li&gt;利用 &lt;code&gt;button onClick()&lt;/code&gt; 觸發預覽圖片的funtion &lt;code&gt;fileUp()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;利用 &lt;code&gt;FileReader()&lt;/code&gt; 讀出file資料&lt;/li&gt;
&lt;li&gt;利用 &lt;code&gt;readAsDataURL&lt;/code&gt; 產生出當下可用的URL供渲染網頁使用&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;程式碼&#34;&gt;程式碼&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;charset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;實作檔案上傳預覽&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;file1&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;accept&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;image/*&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;btn1&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;fileUp()&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;預覽檔案&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;demo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;img1&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;50%&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/css&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;font-family&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;system-ui&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#b3d9d9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;white&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;text-align&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;center&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;fileUp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getElementById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;file1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;files&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;reader&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;FileReader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;reader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;onload&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getElementById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;img1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setAttribute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;src&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getElementById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;demo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;innerHTML&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;reader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;readAsDataURL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;github-link&#34;&gt;GitHub Link&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Yen-An/JS-&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/Yen-An/JS-&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;try-in-codepen&#34;&gt;Try in CodePen&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://codepen.io/yen-an/pen/poaGRRb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://codepen.io/yen-an/pen/poaGRRb&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
