国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

編寫React組件項目實踐分析

2024-05-06 15:21:05
字體:
供稿:網(wǎng)友

當我剛開始寫React的時候,我看過很多寫組件的方法。一百篇教程就有一百種寫法。雖然React本身已經(jīng)成熟了,但是如何使用它似乎還沒有一個“正確”的方法。所以我(作者)把我們團隊這些年來總結(jié)的使用React的經(jīng)驗總結(jié)在這里。希望這篇文字對你有用,不管你是初學(xué)者還是老手。

開始前:

我們使用ES6、ES7語法如果你不是很清楚展示組件和容器組件的區(qū)別,建議您從閱讀這篇文章開始如果您有任何的建議、疑問都清在評論里留言 基于類的組件

現(xiàn)在開發(fā)React組件一般都用的是基于類的組件。下面我們就來一行一樣的編寫我們的組件:

import React, { Component } from 'react';import { observer } from 'mobx-react';import ExpandableForm from './ExpandableForm';import './styles/ProfileContainer.css';

我很喜歡css in javascript。但是,這個寫樣式的方法還是太新了。所以我們在每個組件里引入css文件。而且本地引入的import和全局的import會用一個空行來分割。

初始化State

import React, { Component } from 'react'import { observer } from 'mobx-react'import ExpandableForm from './ExpandableForm'import './styles/ProfileContainer.css'export default class ProfileContainer extends Component { state = { expanded: false }
您可以使用了老方法在constructor里初始化state。更多相關(guān)可以看這里。但是我們選擇更加清晰的方法。
同時,我們確保在類前面加上了export default。(譯者注:雖然這個在使用了redux的時候不一定對)。

propTypes and defaultProps

import React, { Component } from 'react'import { observer } from 'mobx-react'import { string, object } from 'prop-types'import ExpandableForm from './ExpandableForm'import './styles/ProfileContainer.css'export default class ProfileContainer extends Component { state = { expanded: false }  static propTypes = {  model: object.isRequired,  title: string }  static defaultProps = {  model: {   id: 0  },  title: 'Your Name' } // ...}

propTypesdefaultProps是靜態(tài)屬性。盡可能在組件類的的前面定義,讓其他的開發(fā)人員讀代碼的時候可以立刻注意到。他們可以起到文檔的作用。

如果你使用了React 15.3.0或者更高的版本,那么需要另外引入prop-types包,而不是使用React.PropTypes。更多內(nèi)容移步這里。

你所有的組件都應(yīng)該有prop types。

方法

import React, { Component } from 'react'import { observer } from 'mobx-react'import { string, object } from 'prop-types'import ExpandableForm from './ExpandableForm'import './styles/ProfileContainer.css'export default class ProfileContainer extends Component { state = { expanded: false }  static propTypes = {  model: object.isRequired,  title: string }  static defaultProps = {  model: {   id: 0  },  title: 'Your Name' } handleSubmit = (e) => {  e.preventDefault()  this.props.model.save() }  handleNameChange = (e) => {  this.props.model.changeName(e.target.value) }  handleExpand = (e) => {  e.preventDefault()  this.setState({ expanded: !this.state.expanded }) } // ...}            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 密山市| 日照市| 宜章县| 宁德市| 兴城市| 浪卡子县| 镇巴县| 彭州市| 苏尼特左旗| 惠安县| 电白县| 贵港市| 息烽县| 张家界市| 德昌县| 洛川县| 金川县| 江陵县| 科技| 英山县| 平顺县| 万盛区| 十堰市| 迭部县| 会昌县| 英德市| 贺兰县| 乌兰察布市| 德安县| 遂川县| 昆明市| 锦屏县| 宜兴市| 北辰区| 蒲江县| 昭苏县| 友谊县| 松滋市| 建阳市| 临武县| 古田县|