因緣際會之下就開始學React了, 官網教程 連中文版都很精美,我雜亂的筆記就不整理上來了(畢竟我比較懶一點)
本來是要練習 React的狀態傳遞,實做完發現也就那樣,至少這個練習用到的技巧沒什麼好記錄的,倒是陣列渲染的部分因為太不熟悉了摸了好一會兒。
先看 單頁成品 (用 CDN 方式引入 React )
也有做用指令架起來的 localhost 版。
hot reload很方便,其實開發的時候主要是用這個在做。
react-example 可以換成任何你喜歡的名字 不能有大寫
這個也有放github github 。
整包拉下來然後安裝 node_modules yarn install 或 npm i 完成之後應該 yarn start 就可以跑。
目前理解是 yarn 比較快, npm 指令比較齊全。
參考文章: Day 14: React篇: 建置React開發環境
以下進入文章正題。
功能說明中第三點處理亂數不重複的地方:
draw 記錄每次亂數的結果, setDraw設定新的亂數 useState 是 React
的鉤子,這行就是每次一載入網頁都先設定成0的意思
先用Math.random()方法取得一個小於10的亂數
如果 draw 等於 randomDraw 就重新亂數, 用 while 去跑,確保連續兩次得到的亂數結果不會相同
const [draw, setDraw] = React.useState(0);
let buttonClick = () => {
setOriginalDraw(false);
let randomDraw = Math.floor(Math.random() * 10);
while (draw === randomDraw) {
// 避免亂數到同一個數字的狀況
randomDraw = Math.floor(Math.random() * 10);
}
setDraw(randomDraw);
};
功能說明的字本來是寫死,後來配合 rwd ,
本來思路是想說小於某個尺寸時,就將 ul li 替換成 div p 換取更多空間
所以把他寫成陣列想要以螢幕尺寸為基準做判斷(要渲染 ul 還是 div )
let instructionText = [
"點選 [抽獎] 按鈕進行抽獎,抽到數字為2的倍數即中獎。",
"點選 [清除結果] 按鈕清除抽獎結果,第一次載入網頁與甫按下 [清除結果] 之後不能點選。",
"亂數數字有做處理,本次與上一次相同時重新取值,確保連續兩次的結果不會相同。",
];
<ul className="testUl">
{instructionText.map((item, i) => (
<li key={i}>{item}</li>
))}
</ul>
剛從 vue 轉過來,還有點不習慣沒有 v-for 的世界
不過 react 這種陣列渲染的方式也很好,非常直覺, 他直接使用js 的 map() 渲染
跟 vue 相同,透過 map 渲染出來的結果一樣需要給一個(同一層之中)唯一的 key
一開始沒有給 key 讓我爆了很久XD
好的這篇文章我主要就想說這點。結束(誤)。
好不容易(?)用陣列渲染出東西,又碰到樣式的問題。
個別字想要加顏色,所以用了span搭配行內樣式,可是這樣要怎麼塞進陣列裡呢????
然後我就放棄了XD
不是,因為我突然靈光一現... 我的思路是想要當螢幕尺寸縮小,不要 ul li 前面的那個點點, 那我其實只要用 css 不顯是那個點就好啦XDDDD天啦嚕我在幹嘛啦。
加上這行即可
成品放了直接寫死與陣列渲染的版本, 差別只在於後者沒有樣式。
大概就是這樣了。 等下再發一篇講標題前後那兩根線的文,
那兩根線燒掉我的好幾個腦細胞QAQ。