mentor-program-day122

不認輸,繼續奮鬥。

進度

今天跟圈圈叉叉奮鬥了一整天,差不多快釐清整個思路了,還差一點就完成了。先附上第一篇筆記 想用 React 做出五子棋嗎?先從圈圈叉叉開始吧,相信明天就能搞定,加油!

學到的事情

在讀官方文件時,發現背後還藏了蠻多那些進階 JavaScript 的知識,最常見的就是 thisclosure

舉例來說,官方在處理 this 值是這樣做的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Board extends React.Component {
constructor(props) {
super(props);
this.state = {
squares: Array(9).fill(null),
};
}

handleClick(i) {
const squares = this.state.squares.slice();
squares[i] = 'X';
this.setState({squares: squares});
}

renderSquare(i) {
return (
<Square
value={this.state.squares[i]}
// 用 arrow function 來綁定
onClick={() => this.handleClick(i)}
/>
);
}
// ...
}

箭頭函式雖然寫起來乾淨,但缺點是可讀性不是那麼好,所以我原本看不太懂官方特別強調這邊用箭頭函式的原因是什麼。不過後來去 codepen 轉換一下寫法就懂了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
renderSquare () {
return (
<Square
value={this.state.squares[i]}
// 外面包一層 function
onClick={function wrapper () {
// 1. onClick 時 呼叫 wrapper
// 2. 執行 wrapper 時又再呼叫 this.handleClick(i)
// 3. 至於 i 的值會是透過 scope chain 找到當初執行 renderSquarei
this.handleClick(i)
}}
/>
)
}

理解完這些以後,我才明白當你對一個東西不了解時,你可以試著像這樣抽絲剝繭,把那些簡化後的東西打一步一步打回原形。通常這樣做以後就會慢慢找出答案了。

題外話

聽說南韓已經開始放寬防疫制度了,台灣也似乎也打算這樣做。

不知道未來會怎麼樣,總之還是希望大家能平安無事就好。

期許

明天要把圈圈叉叉搞定,然後開始搞五子棋。

React 之在戰圈圈叉叉,來加上時光機的功能吧! 想用 React 做出五子棋嗎?先從圈圈叉叉開始吧
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×