React 基本元素就是 Component,一整個網頁就是由不同的 Component 組成。
ReactDom.render(<App />, document.getElementById('root')); // => 將 APP render 到 #root 元素
像之前的範例,App
就是一個 Component,會渲染到 #root
這個 DOM 物件裡面。
import React, {Component} from 'react';
class App extends Component {
render() { // => 每個 Component 都要有 render function
return (
<h1>hello React</h1>
)
}
}
export default App;
而 render
function 是 Component 很重要的一環,每一個 Component 都一定要有 render()
,沒有加上 render()
的話會報錯誤訊息。
<App />
<Component />
這樣是一個 Component 的既定寫法,有點像 HTML 的 tag 寫法。
所以也可以在 render()
裡面放另一個 Component,像以下範例就是在 <App />
render 裡面放 <Title />
跟 <Text />
的 Component。
( 要注意定義 Class 的時候一定要 extends Component
,不然會報錯 )
class Title extends Component {
render() {
return <h2>title</h2>
}
}
class Text extends Component {
render() {
return <p>text</p>
}
}
class App extends Component {
render() {
return (
<div>
<Title /> // => Component
<Text /> // => Component
</div>
)
}
}
而像這樣 <Component />
有點像 HTML 的語法叫做 JSX,有點像是 HTML 跟 JavaScript 的混合體。
所以寫 JSX 就像是在寫 HTML 般很好上手,但還是有些微小差異:
<div class="">
的寫法要寫成 <div className="">
,不然會報錯{ }
包起來的內部可以放 JavaScript 語法-
連接的 CSS 屬性名稱都會轉成駝峰式命名:
font-size
=> fontSize
class App extends Component {
render() {
const name = 'title';
const style = {
color: 'grey',
fontSize: '30px', // => Camel-Case
}
return (
<div className={name + '1'} style={style} data-id='1'> // => className
<Title />
<Text />
</div>
)
}
}
傳統寫網頁的時候,想要對按鈕添加事件監聽會像以下範例:
function sayHi() {
alert('hi!');
}
document.querySelector('.button').addEventListener('click', sayHi);
但因為寫 React 是把 DOM 跟 JavaScript 寫在一起,所以我們可以直接事件監聽寫在 DOM 上面:
class Title extends Component {
render() {
function sayHi() {
alert('hi!');
}
return <h2 onClick={sayHi}>title</h2>
}
}
/* 或者把上面範例改寫,簡化成箭頭函式 */
class Title extends Component {
render() {
return <h2 onClick={() => alert('hi')}>title</h2>
}
}
render
functionclass
=> className
{
可以放 Javascript 語法 }
font-size
=> fontSize
onClick
( 以上內容大部分是 程式導師實驗計畫第三期 的學習筆記,如有錯誤歡迎糾正,非常感謝 🤓 )
Written on September 11th, 2019 by Yakim shu