註冊元件
- const 註冊元件:箭頭函式
const AwesomeHeader = () => {
return (
<h1>用const註冊元件</h1>
)
}
複製程式碼
- class 註冊元件:從React.Component裡繼承
class AwesomeContent extends React.Component {
// 需要在render方法裡去return 我們們要渲染的內容
render () {
return (
<div>使用語法糖註冊元件</div>
<Fragment>使用語法糖註冊元件</Fragment>
)
}
}
複製程式碼
注意點: 元件每個單詞首字母必須大寫; Fragment是react 16之後新增的元件,用它包裹就不會產生多餘的DOM元素; return裡面是JSX,外層必須有根元素包裹;
元件的呼叫
ReactDOM.render(
//呼叫時外層需包一個根元素,或者使用Fragment包裹
<div className="app">
//當元件裡面沒有內容是建議使用空元素,推薦使用自閉合
<AwesomeHeader/>,
<AwesomeContent/>
</div>
)
複製程式碼
關於JSX
在render方法中的return內部是JSX,所以在JSX裡面如果想寫JS的程式碼,必須加上 “{}”
{/*如果想在return中寫註釋或者其他JS程式碼,必須在外層加上 “{}” */}
複製程式碼
元件巢狀
如果你想在元件中插入其他內容,這時就需要元件巢狀,不然插入的內容將無法顯示
// react dom裡提供了一個render方法,用於渲染JSX(javascriptxml)元件或者元素
ReactDOM.render(
<div className="app">
<AwesomeHeader>我想在這裡顯示內容,但是他不會出來<AwesomeHeader/>
</div>
)
複製程式碼
react的特殊props,表示元件的子元素,由於使用繼承的方式註冊元件,可用this.props來獲取
- class註冊的元件:使用{this.props.children}來註冊子元件
class AwesomeContent extends React.Component {
console.log(this.props)
render (){
return (
<div>
{/* react裡props.children是一種特殊的props,就表示一個元件的子元素 */}
{/* 由於我們們使用的是繼承的方式來寫元件,所以,這裡得用this.props來獲取 */}
<h1>{this.props.children}</h1>
</div>
)
}
}
複製程式碼
- 箭頭函式註冊的元件:{props.children}
const AwesomeHeader = (props) => {
console.log(props)
cosnt headerText = 'awesome react'
return (
<h1>{headerText}-{props.children}</h1>
)
}
複製程式碼
元件傳參
父元件呼叫子元件,如果想在子元件裡面傳參,可直接在父元件呼叫子元件的地方寫上屬性,屬性除了字串都要加上 “{}” ,子元件可通過 “props.屬性名” 來訪問
<AwesomeHeader
headerText="Hello World"
loginFn{()=>{
console.log('方法')
}}
/>
複製程式碼
AwesomeHeader是一個函式式的元件,所以可以在內部通過props.屬性名來訪問
工程化思想
一般會在src資料夾中新建一個components專門放元件的js檔案,類似這樣,快捷鍵:rcc
//首先引入React和他的Component方法
import React, { Component } from 'react'
//再將class定義的這一整段元件export出去
export default class AwesomeContent extends Component {
render() {
console.log(this.props)
return (
<div>
{/* react裡props.children是一種特殊的props,就表示一個元件的子元素 */}
{/* 由於我們們使用的是繼承的方式來寫元件,所以,這裡得用this.props來獲取 */}
<h4>{this.props.children}</h4>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequuntur temporibus libero minima dolorem, rerum nulla similique reprehenderit est et reiciendis possimus delectus atque sint velit quas, laboriosam repellat quos ratione!
</div>
)
}
}
複製程式碼
components裡面還有一個index.js專門管理元件
//第一種引入方式
import AwesomeHeader from './AwesomeHeader'
import AwesomeContent from './AwesomeContent'
export {
AwesomeHeader,
AwesomeContent
}
//第二種引入方式
export { default as AwesomeHeader } from './AwesomeHeader'
export { default as AwesomeContent } from './AwesomeContent'
複製程式碼
接著src中新建一個App.js,在這裡面統一import元件
//首先引入React和他的Component方法
import React, { Component, Fragment } from 'react';
//同意引入元件
import {
AwesomeHeader,
AwesomeContent
} from './components'
//並匯出App父元件
export default class App extends Component {
render() {
return (
<Fragment>
{/* App是父元件,在呼叫AwesomeHeader這個元件的時候,AwesomeHeader就是App的子元件, 所以想要傳遞引數,直接在子元件呼叫的地方寫屬性, 屬性除了字串以外,都要用{} */}
{/* AwesomeHeader是一個函式式的元件,所以可以在內部通過props.屬性名來訪問 */}
<AwesomeHeader
headerText="Niubility React"
logFn={() => {
console.log('從app傳過來的方法')
}}
/>
<AwesomeHeader
headerText="Awesome means Niubility"
logFn={() => {
console.log('從app傳過來的方法')
}}
/>
<AwesomeContent><div>awesome content 1</div></AwesomeContent>
</Fragment>
)
}
}
複製程式碼
再將App.js傳入index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App'
ReactDOM.render(
<App />,
document.querySelector('#app')
)
複製程式碼